首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中使用Salt解密密码

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

Stack Overflow用户
提问于 2013-02-01 06:20:23
回答 1查看 3.9K关注 0票数 1

目前,我正在使用salt加密密码。

代码语言:javascript
复制
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);
        }

现在加密没问题。现在,使用同样的技术,我想解密密码。

怎么做?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-02-01 06:23:59

你不是在加密密码,而是对密码进行哈希运算。

哈希的概念是,它是一个单向函数,从原始文本创建散列在计算上很便宜,但从散列开始到以纯文本创建哈希值的计算成本很高。

虽然有各种破坏SHA1的攻击(您的哈希算法),但是没有一种简单的方法来“解密”哈希值(引号中的“解密”意味着找到一个与咸的哈希输出值相对应的输入值)。

如果您确实想加密文本,请查看一些算法,比如AES (也是由.NET框架支持的)。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14640851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档