在C#中使用Salt的解密密码

use*_*285 1 .net c# encryption saltedhash

目前我正在使用salt来加密密码.

public static SaltedHash Create(string password) 
        {
            string salt = _createSalt();
            string hash = _calculateHash(salt, password);
            return new SaltedHash(salt, hash);
        }

private static string _createSalt() 
        {
            byte[] r = _createRandomBytes(SALT_LENGTH);
            return Convert.ToBase64String(r);
        }
private static byte[] _createRandomBytes(int len) 
        {
            byte[] r = new byte[len];
            new RNGCryptoServiceProvider().GetBytes(r);
            return r;
        }
private static string _calculateHash(string salt, string password) 
        {
            byte[] data = _toByteArray(salt + password);
            byte[] hash = _calculateHash(data);
            return Convert.ToBase64String(hash);
        }
private static byte[] _toByteArray(string s) 
        {
            return System.Text.Encoding.UTF8.GetBytes(s);
        }
private static byte[] _calculateHash(byte[] data) 
        {
            return new SHA1CryptoServiceProvider().ComputeHash(data);
        }
/// <summary>
        /// This method verifies a password from a SaltedHash class.
        /// <param name="password">The password to verity</param>
        /// <returns>Boolean</returns>
        /// </summary>
        public bool Verify(string password) 
        {
            string h = _calculateHash(_salt, password);
            return _hash.Equals(h);
        }
/// <summary>
        /// This method creates a SaltedHash object from a salt and hash value. 
        /// <param name="salt">Salt value</param>
        /// <param name="hash">Hash value</param>
        /// <returns>SaltedHash class</returns>
        /// </summary>
        public static SaltedHash Create(string salt, string hash) 
        {
            return new SaltedHash(salt, hash);
        }
Run Code Online (Sandbox Code Playgroud)

现在加密很好.现在使用相同的技术我想解密密码.

这该怎么做 ?谢谢.

Eri*_* J. 9

您没有加密密码,您正在对其进行哈希处理.

哈希的想法是它是一个单向函数,从原始文本创建哈希计算成本低廉,但从哈希开始计算成本高,最终得到创建该哈希值的纯文本.

尽管存在各种攻击来破坏SHA1(您的哈希算法),但是没有直接的方法来"解密"散列值(引号中的"解密"意味着找到与盐渍的散列输出值相对应的输入值).

如果您确实想加密文本,请查看AES等算法(.NET框架也支持).