bcrypt加密password BCrypt对密码进行加密及密码验证

1、bcrypt相关描述

bcrypt

bcrypt是专门为密码存储而设计的算法,基于Blowfish加密算法变形而来,由Niels Provos和David Mazières发表于1999年的USENIX。

bcrypt最大的好处是有一个参数(work factor),可用于调整计算强度,而且work factor是包括在输出的摘要中的。随着攻击者计算能力的提高,使用者可以逐步增大work factor,而且不会影响已有用户的登陆。

bcrypt经过了很多安全专家的仔细分析,使用在以安全著称的OpenBSD中,一般认为它比PBKDF2更能承受随着计算能力加强而带来的风险。bcrypt也有广泛的函数库支持,因此我们建议使用这种方式存储密码。

scrypt

scrypt是由著名的FreeBSD黑客 Colin Percival为他的备份服务 Tarsnap开发的。

和上述两种方案不同,scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利用rainbow table进行暴力攻击更加困难。scrypt没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,scrypt在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。

https://baike.baidu.com/item/PBKDF2/237696?fr=aladdin

 

2、新建项目ConsoleBCrypt,使用NuGet程序包管理器添加BCrypt

 

 

 

3、Program.cs中添加如下代码:

using DevOne.Security.Cryptography.BCrypt;
using System;

namespace ConsoleBCrypt
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("BCryptHelper");
            string salt = BCryptHelper.GenerateSalt();
            Console.WriteLine($"产生随机盐 salt:{salt}");

            string password = "1234567890";
           Console.WriteLine($"明文:{password}");
            string pwd = BCryptHelper.HashPassword(password, salt);
            Console.WriteLine($"加密以后的密文:{pwd}");
            bool isMatchpasswordAndpwd = BCryptHelper.CheckPassword("1234567890", pwd);
            Console.WriteLine($"明文和加密以后的密文是否匹配:{isMatchpasswordAndpwd}");
            Console.ReadLine();
        }
    }
}

4、运行结果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章