Как использовать SecureString для создания хэша SHA1 или SHA512?

Я хотел бы использовать переменную SecureString в VB.NET и преобразовать ее в хэш SHA1 или SHA512. Как мне безопасно преобразовать SecureString в массив Byte, который примет HashAlgorithm.ComputeHash?


person Luke    schedule 07.10.2009    source источник


Ответы (1)


Что насчет того, если мы избежим единственного используемого экземпляра String (вывод) и заменим его массивом символов. Это позволит нам стереть этот массив после использования:

    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;
    }

Я что-то пропустил?

person Seven    schedule 25.11.2010
comment
Да - см. ответ на этот вопрос: stackoverflow.com/ вопросы/14293344/ - person RobSiklos; 22.01.2013