PDA

View Full Version : سوال: ذخیره چند متغیر در برنامه بدون دیتابیس



vahid_esp
جمعه 13 شهریور 1388, 02:45 صبح
با سلام خدمت دوستان.
من میخوام از چند تا متغیر تو برنامم استفاده کنم که بعد از خارج شدن و باز کردن برنامه هم قابل استفاده باشه.
چطور می تونم این کارو بدون دیتابیس انجام بدم.

toopak
جمعه 13 شهریور 1388, 03:31 صبح
میتونی تو رجیستری ذخیره کنی
دستور ذخیره:

SaveSetting("mysetting", "setting", "color", SlrTextbox1.Text)
اولی و دومی مسیر رو مشخص میکنه
نام متغیری که میخوایی
محتوایی که میخوایی ذخیره کنی

این هم کد گرفتن اطلاعات:

Label1.Text = GetSetting("mysetting", "setting", "taxiname", "")
اولی و دومی باید مثل بالایی باشه
متغیر یا شی که میخوایی مقدار توش قرار بگیره
نام متغیری که میخوایی

Hossis
جمعه 13 شهریور 1388, 11:17 صبح
راههای دیگری هم هست از جمله استفاده از فایل های INI - استفاده از فایل متنی و فایل های xml ولی ساده ترین راه همون استفاده از رجیستری هست.

Navid Asadi
جمعه 13 شهریور 1388, 13:24 عصر
سلام
من خودم از Save Setting استفاده میکنم اما یک سوال دارم:
این اطلاعات دقیقا در کجای ریجستری ذخیره میشه؟
آیا میشه به طور مستقیم RegEdit به اون ها دسترسی پیدا کرد؟
آیا جای مطمئنی برای ذخیره پسورد هست؟

toopak
جمعه 13 شهریور 1388, 14:34 عصر
سلام
من خودم از Save Setting استفاده میکنم اما یک سوال دارم:
این اطلاعات دقیقا در کجای ریجستری ذخیره میشه؟
آیا میشه به طور مستقیم RegEdit به اون ها دسترسی پیدا کرد؟
آیا جای مطمئنی برای ذخیره پسورد هست؟

بله میشه دسترسی پیدا کرد
کافیه تو run تایپ کنید regedit و ok کنید
بعد از منوی edit روی find کلیک کنید و عبارت

SaveSetting("mysetting", "setting", "color", SlrTextbox1.Text)
رو جستجو کنید
البته میسیر اصلیش اینه:

HKEY_CURRENT_USER\Software\VB And VBA Program Settings\mysetting\setting\

و اینکه از نظر ذخیره پسورد بهتره encrypt بشه و بعد ذخیره بشه،چون به راحتی میشه بهشون دست پیدا کرد،البته اگر کاربر مسیر رو بدونه

toopak
جمعه 13 شهریور 1388, 14:38 عصر
این هم روش ذخیره تو فایل ini که Hossis بهش اشاره کرد:

Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Sub Form1_Load()
Dim Buffer As String
Buffer = String(255, 0)
'برای نوشتن در فایل
WritePrivateProfileSection "color", "blue", "c:\setting.ini"
'خواندن مقدار از فایل
GetPrivateProfileSection "color", Buffer, 255, "c:\setting.ini"
Text1.Text = Buffer
End Sub

Navid Asadi
جمعه 13 شهریور 1388, 15:13 عصر
و اینکه از نظر ذخیره پسورد بهتره encrypt بشه و بعد ذخیره بشه،چون به راحتی میشه بهشون دست پیدا کرد،البته اگر کاربر مسیر رو بدونه

یک مقدار بیشتر توضیح میدید؟

toopak
جمعه 13 شهریور 1388, 15:35 عصر
منظورم اینه که اگر میخوایی پسورد رو توی رجیستری ذخیره کنید بهتره اول اون رو کد کنید
یعنی مثلا اگر پسورد 8456577 باشه ابتدا اون رو مثلا به sd56sfe-df4 کد کنید،بعد ذخیره کنید
وقت بازیابی هم اول پسورد کد شده رو با اصلی چک کنید
البته میتونید از تایع gethash خود وی بی هم استفاده کنید

viper2009
شنبه 14 شهریور 1388, 01:01 صبح
منظورم اینه که اگر میخوایی پسورد رو توی رجیستری ذخیره کنید بهتره اول اون رو کد کنید
یعنی مثلا اگر پسورد 8456577 باشه ابتدا اون رو مثلا به sd56sfe-df4 کد کنید،بعد ذخیره کنید
وقت بازیابی هم اول پسورد کد شده رو با اصلی چک کنید
البته میتونید از تایع gethash خود وی بی هم استفاده کنید

سلام
می تونی برام نمونه بیاری؟

toopak
شنبه 14 شهریور 1388, 01:34 صبح
سلام
می تونی برام نمونه بیاری؟

چرا که نه؟
مثلا این کلاس رو اضافه کن به فرمت،یه کلاسه برای کد کرد اطلاعات

Public Class Crypto
Private Shared DES As New TripleDESCryptoServiceProvider
Private Shared MD5 As New MD5CryptoServiceProvider

Public Shared Function MD5Hash(ByVal value As String) As Byte()
Return MD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(value ))
End Function

Public Shared Function Encrypt(ByVal stringToEncrypt As String, ByVal key As String) As String
DES.Key = Crypto.MD5Hash(key)
DES.Mode = CipherMode.ECB
Dim Buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(stringToEncrypt)
Return Convert.ToBase64String(DES.CreateEncryptor().Trans formFinalBlock(Buffer, 0, Buffer.Length))
End Function


Public Shared Function Decrypt(ByVal encryptedString As String, ByVal key As String) As String
Try
DES.Key = Crypto.MD5Hash(key)
DES.Mode = CipherMode.ECB
Dim Buffer As Byte() = Convert.FromBase64String(encryptedString)
Return ASCIIEncoding.ASCII.GetString(DES.CreateDecryptor( ).TransformFinalBlock(Buffer, 0, Buffer.Length))
Catch ex As Exception
MessageBox.Show("Invalid Key", "Decryption Failed", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
End Function

End Class

استفاده کردنش هم به این صورت

Dim cc As String = Crypto.Encrypt(TextBox1.Text, "x158hamid")

x158hamid کلیدش حساب میشه،شما تو کد خودت هر چیزی میتونی بزاری

و برای اینکه کد شدش رو دوباره decrypt کنی :

TextBox1.Text = Crypto.Decrypt(code, "x158hamid")

فقط یادت باشه که باید کلیدی که موقع encrypt و decrypt استفاده میکنی یکی باشه