كيف تستخدم استخدام SecureString لإنشاء SHA1 أو SHA512 Hash؟
-
20-09-2019 - |
سؤال
أرغب في استخدام مرحاء تأمين داخل VB.NET وتحويل ذلك إلى Hash Sha1 أو Sha512. كيف يمكنني تحويل التمرينات بشكل آمن إلى صفيف البايت أن Hashalgorithm.computehash سيقبل؟
المحلول
كتبته في C # وتحويلها إلى VB. نأمل أن لا يزال يعمل!
Dim input As [Char]() = "Super Secret String".ToCharArray()
Dim secret As New SecureString()
For idx As Integer = 0 To input.Length - 1
secret.AppendChar(input(idx))
Next
SecurePassword.MakeReadOnly()
Dim pBStr As IntPtr = Marshal.SecureStringToBSTR(secret)
Dim output As String = Marshal.PtrToStringBSTR(pBStr)
Marshal.FreeBSTR(pBStr)
Dim sha As SHA512 = New SHA512Managed()
Dim result As Byte() = sha.ComputeHash(Encoding.UTF8.GetBytes(output))
تعديل:
كما تم الإشارة به بنفسي وعدد قليل من الآخرين في التعليقات، أريد أن أحضر هذا إلى هنا. القيام بذلك ليست فكرة جيدة. أنت تتحرك البايتات إلى مكان لم يعد آمنا. بالتأكيد يمكنك القيام بذلك، ولكن ربما لا ينبغي
نصائح أخرى
ماذا عن ذلك، إذا تجنبنا مثيل السلسلة المستخدمة فقط (الإخراج) واستبدالها بمصفيف حرف. هذا سيمكننا من مسح هذه الصفيف بعد الاستخدام:
public static String SecureStringToMD5( SecureString password )
{
int passwordLength = password.Length;
char[] passwordChars = new char[passwordLength];
// Copy the password from SecureString to our char array
IntPtr passwortPointer = Marshal.SecureStringToBSTR( password );
Marshal.Copy( passwortPointer, passwordChars, 0, passwordLength );
Marshal.ZeroFreeBSTR( passwortPointer );
// Hash the char array
MD5 md5Hasher = MD5.Create();
byte[] hashedPasswordBytes = md5Hasher.ComputeHash( Encoding.Default.GetBytes( passwordChars ) );
// Wipe the character array from memory
for (int i = 0; i < passwordChars.Length; i++)
{
passwordChars[i] = '\0';
}
// Your implementation of representing the hash in a readable manner
String hashString = ConvertToHexString( hashedPasswordBytes );
// Return the result
return hashString;
}
هل هناك أي شيء فاتني؟
لا تنتمي إلى StackOverflow