如何使用 SecureString 创建 SHA1 或 SHA512 哈希?

Posted

技术标签:

【中文标题】如何使用 SecureString 创建 SHA1 或 SHA512 哈希?【英文标题】:How do a use a SecureString to create a SHA1 or SHA512 Hash? 【发布时间】:2010-12-04 12:13:12 【问题描述】:

我想在 VB.NET 中使用 SecureString 变量并将其转换为 SHA1 或 SHA512 哈希。如何安全地将 SecureString 转换为 HashAlgorithm.ComputeHash 将接受的 Byte 数组?

【问题讨论】:

【参考方案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;
    

有什么我错过的吗?

【讨论】:

是的 - 请参阅此问题的答案:***.com/questions/14293344/…

以上是关于如何使用 SecureString 创建 SHA1 或 SHA512 哈希?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SecureString 转换为 System.String?

如何将 SecureString 从一个进程传递到另一个进程?

convertto-securestring结果 使用python解密

在 .NET 中散列 SecureString

SecureString 在 C# 应用程序中是不是实用?

UiPath中如何安全的保存账号密码