Pregunta

Me gustaría usar una varible SecureString dentro de VB.NET y convertir eso a un SHA1 o SHA512 hash. ¿Cómo iba a convertir de forma segura la SecureString a la matriz de bytes que HashAlgorithm.ComputeHash aceptará?

¿Fue útil?

Solución

ha sido tecleada en c # y convertido a VB. Es de esperar que todavía funciona!

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))

editar

Como se ha señalado por mí y algunos otros en los comentarios, quiero llevar esto a la atención aquí. Hacer esto no es una buena idea. Se están moviendo los bytes a un lugar que ya no es segura. Claro que puedes hacerlo, pero es probable que no debe

Otros consejos

¿Qué hay de que, si evitamos el único caso en cadena que se utiliza (salida) y sustituirla por una matriz de caracteres. Esto nos permitiría eliminar esta matriz después de su uso:

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

¿Hay algo que perder?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top