Wie ein SHA1 oder SHA512 Hash eine Verwendung ein Secure zu schaffen?
-
20-09-2019 - |
Frage
Ich möchte einen Secure varible in VB.NET und konvertieren verwenden, die an einen SHA1 oder SHA512 Hash. Wie würde ich sicher den Secure auf die Byte-Array konvertieren, dass HashAlgorithm.ComputeHash akzeptieren?
Lösung
typisiert es in c # und VB umgewandelt. Hoffentlich funktioniert es immer noch!
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))
Bearbeiten :
Wie es von mir und ein paar andere in den Kommentaren darauf hingewiesen worden ist, möchte ich hier, um die Aufmerksamkeit zu bringen. dies zu tun, ist keine gute Idee. Sie bewegen sich die Bytes an einem Ort, der nicht mehr sicher ist. Natürlich können Sie es tun, aber wahrscheinlich sollte nicht
Andere Tipps
Was ist, dass, wenn wir die nur verwendet String-Instanz (Ausgang) vermeiden und mit einem Zeichen-Array ersetzen. Dies würde es uns ermöglichen, dieses Array nach dem Gebrauch zu wischen:
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;
}
Gibt es etwas, was ich verpasst?