どのように使用SecureStringは、SHA1またはSHA512ハッシュを作成するのですか?

StackOverflow https://stackoverflow.com/questions/1529487

質問

私はVB.NET内SecureStringのvaribleを使用して、SHA1またはSHA512ハッシュにそれを変換したいと思います。どのように私はしっかりHashAlgorithm.ComputeHashが受け入れるバイト配列にSecureStringを変換するのでしょうか?

役に立ちましたか?

解決

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

私は逃した何がありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top