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?

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top