zoukankan      html  css  js  c++  java
  • 安全防护之加盐慢哈希加密

    彩虹表的反推,使md5加密也不安全了,所以一些的程序员想出了个办法,即使用户的密码很短,只要我在他的短密码后面加上一段很长的字符,再计算 md5 ,那反推出原始密码就变得非常困难了。加上的这段长字符,我们称为盐(Salt),通过这种方式加密的结果,我们称为 加盐 Hash 。比如:md5(md5(password)+salt)

     
    但是这种也不是特别安全,假如攻击者拿到了salt,然后穷举出6位密码的所有md5(md5(password)+salt)值,那么依旧会被破解,所以更安全的一种方法就是加盐慢哈希加密。
     
    所谓慢哈希,其实就是指执行这个哈希函数非常慢,这样暴力破解需要枚举遍历所有可能结果时,就需要花上非常非常长的时间。最好对不同用户的密码随机生成不同的salt,salt库和密码库分离开。
     
    代码
        class Program
        {
            static void Main(string[] args)
            {
                string pwd = "123456";
                string pwdMd5 = Md5Encryption(pwd);
                string salt = Guid.NewGuid().ToString("N");
                string pwdSlowHash = GetSlowHashPWD(pwdMd5, salt);
                Console.WriteLine("盐值:" + salt + " 加密后:" + pwdSlowHash);
                Console.ReadKey();
    
            }
    
            /// <summary>
            /// md5加密
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static string Md5Encryption(string input)
            {
                byte[] result = Encoding.Default.GetBytes(input);   
                MD5 md5 = new MD5CryptoServiceProvider();
                byte[] output = md5.ComputeHash(result);
                return BitConverter.ToString(output).Replace("-", "");  
            }
    
            /// <summary>
            /// 慢哈希加密
            /// </summary>
            /// <param name="passwordMd5"></param>
            /// <param name="salt"></param>
            /// <returns></returns>
            internal static string GetSlowHashPWD(string passwordMd5, string salt)
            {
                int iterations = 1000;//密码慢哈希迭代次数
                byte[] saltBytes = Encoding.UTF8.GetBytes(salt);
                var pbkdf2 = new Rfc2898DeriveBytes(passwordMd5.ToUpper(), saltBytes, iterations);
                //用密码、salt 值和迭代次数返回伪随机密钥。 
                byte[] keyBytes = pbkdf2.GetBytes(16);
                return BitConverter.ToString(keyBytes).Replace("-", "");
    
            }
        }
     

    参考:http://www.jianshu.com/p/d3f5aab48158

            https://linux.cn/article-2722-2.html

  • 相关阅读:
    《人类简史》八、融合统一(下)——宗教的法则、历史的混沌
    《今日简史》七、融合统一(中)——帝国的愿景
    《人类简史》六、融合统一(上)——历史的方向、金钱的味道
    《人类简史》五、监狱高墙——想象构建的秩序
    设计模式之职责链模式(Chain of Responsibility)
    设计模式之代理模式(Proxy)
    设计模式之享元模式(FlyWeight)
    设计模式之外观模式(Facade)
    设计模式之装饰模式(Decorator)
    设计模式之组合模式(Composite)
  • 原文地址:https://www.cnblogs.com/zhangchengye/p/6323409.html
Copyright © 2011-2022 走看看