C#C# salt+hash 加密

  (3)明文:原始密码,未经过任何算法加密的密码。

8   版权

     
只好发出伪随机数而不可以生出绝对随机的随机数。

  (2)真随机数:true random number
generators
,简称为:T昂科威NGs,是利用不足预感的情理格局来发生的随机数。

           数据库表结果如下:

4   hash原理

   (3)关键代码如下:

      数,那里的“伪”是有规律的情趣,就 
是电脑爆发的伪随机数既是自由的又是有规律的。怎么着通晓呢?爆发的伪随机数有时遵从一定的法则,有

     
 注释:当然,也得以调用类Random下的章程来发出伪随机数。

是因为哈希函数是不可逆的,尽管有人打开了数据库,也无力回天见到用户的密码是稍稍。

5   C#常见加密算法

  
第3步:调用结构体Guid的NewGuid()方法;

C# 1

(1)原始密码经哈希函数总括后得到2个哈希值

          
C# 2

(2)改变原有密码,哈希函数统计出的哈希值也会相应改变

若是你须求保留密码(比如网站用户的密码),你要考虑怎么保护那几个密码数据,象上面那样直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将得以一贯看出那些密码。

 
(4)密文:原始密码通过某种算法加密后,形成的密码。

那就是说存储经过哈希函数加密后的密码是还是不是就是安全的了吧?参照六、发现并不安全,唯有加上salt才平安,因为salt是随机生成的。

  
(2)SHA家族:那里顺便提一下,United States政党从前常见应用SHA-1算法,在二〇〇五年被小编国山东高校的王小云教授发现了安全漏洞,所以今后可比常

protected void btnRegister_Click(object sender, EventArgs e)
        {
           //用户名和密码
            string userName = this.TextBoxUserName.Text;
            string userPwd = this.TextBoxPWD.Text;
            //salt
            string strSalt= Guid.NewGuid().ToString();

            //SHA256加密
            byte[] pwdAndSalt = Encoding.UTF8.GetBytes(userPwd + strSalt);
            byte[] hashBytes = new SHA256Managed().ComputeHash(pwdAndSalt);
            string hashStr = Convert.ToBase64String(hashBytes);

            StringBuilder strBuid = new StringBuilder();
            strBuid.Append("INSERT INTO userInfo(");
            strBuid.Append("userName,userPassword,salt) values(");
            strBuid.Append("@userName,@hashStr,@strSalt)");
            SqlParameter[] sqlpara = {
                                         new SqlParameter("@userName",SqlDbType.NVarChar,50),
                                         new SqlParameter("@hashStr",SqlDbType.NVarChar,50),
                                         new SqlParameter("@strSalt",SqlDbType.NVarChar,50)
                                     };
            sqlpara[0].Value = this.TextBoxUserName.Text;
            sqlpara[1].Value = hashStr;
            sqlpara[2].Value = strSalt;
            //获取连接字符串
            string sqlConStr = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;

            using (SqlConnection con=new SqlConnection(sqlConStr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(strBuid.ToString(),con);
                cmd.Parameters.AddRange(sqlpara);
                if (cmd.ExecuteNonQuery()>0)
                {
                    Response.Write("<script>alert('注册成功!')</script>");
                }
                else
                {
                    Response.Write("<script>alert('注册失败!')</script>");
                }

            }
        }

           组合规则:原始明文+salt伪随机值,即admin9de74893-0b41-4f4e-91dc-06f62241b8bc

  (1)伪随机数:pseudo-random number
generators
,简称为:P奥迪Q7NGs,是电脑应用自然的算法来发出的。伪随机数并不是假随机

    
最简便易行、常见的破解格局当属字典破解(Dictionary Attack)和暴力破解(Brute
Force Attack)格局。那两种方法不难就是猜密码。

C# 3

   (1)MD5

   hash是一种不可逆加密算法,C#
HASH算法相比多,列举三种如下:

    
MD5加密、SHA家族加密、瑞鹰SA加密、DES加密,近日主流加密为奥迪Q3SA,如数字签名等,在本篇博客中,就不论述,未来会对那四类算法作详细阐释。

6   常见密码破解算法

           原始明文为:admin

           假使salt发生的伪随机数为:9de74893-0b41-4f4e-91dc-06f62241b8bc

消除的点子是将密码加密后再囤积进数据库,比较常用的加密方法是使用哈希函数(Hash
Function)。哈希函数的有血有肉定义,我们可以在网上大概相关书籍中查阅到,简单地说,它的特色如下:

   规则:salt伪随机值+原始密码,即salt伪随机值与原来密码组合成明文,然后经过hash算法形成密文,如:

(3) 同样的密码,哈希值也是均等的

3   C# salt爆发伪随机数法则

     
时不坚守任何规律;伪随机数有部分遵守一定的规律;另一某个不听从任何规律。比如“世上没有两片形状完全相同的叶子”,那多亏点到为止

          
hash加密后密文:urfFO/IWz912E2GXL4KiCzbosuZ6TdLpMk7lDCR-VVVdYk=

7   为啥使用hash来加密

2   C# salt+hash加密规则

    
查表法不像字典破解和暴力破解那样猜密码,它首先将一部分相比常用的密码的哈希值算好,然后建立一张表,当然密码越来越多,那张表就越大。当您通晓有个别密码的哈希值时,你只必要在你建立好的表中查找该哈希值,假诺找到了,你就明白对应的密码了。

(4)
哈希函数是单向、不可逆的。也等于说从哈希值,你无法推算出原始的密码是多少

      
用SHA-1加长的变种,比如SHA-256。在.NET中,可以行使SHA256Managed类

1   先明了多少个基本概念

  • 谢谢您的开卷,若有不足之处,欢迎指教,共同学习、共同进步。
  • 博主网址:http://www.cnblogs.com/wangjiming/。
  • 极少一些小说利用读书、参考、引用、抄袭、复制和粘贴等多种主意结合而成的,大部分为原创。
  • 如你喜欢,麻烦推荐一下;如您有新想法,欢迎指出,邮箱:二零一四177728@qq.com。
  • 可以转发该博客,但不能够不有名博客来源。

有了哈希函数,大家就足以将密码的哈希值存储进数据库。用户登录网站的时候,大家可以印证用户输入密码的哈希值是还是不是与数据库中的哈希值相同。

 C# 4

 

   第贰步:引入命名空间 using
System;

C# 5 

     
字典破解和暴力破解都以成效比较低的破解格局。若是您驾驭了数据库中密码的哈希值,你就可以运用一种更便捷的破解形式,查表法(Lookup
Tables)。还有一对方法,比如逆向查表法(Reverse Lookup
Tables)、彩虹表(Rainbow
Tables)等,都和查表法平顶山小异。今后大家来看一下查表法的规律。

   第2步:代码表示 string strSalt =
Guid.NewGuid().ToString();  

     
物的表征,即随机性,不过每一种树的纸牌都有近似的形状,那正是事物的共性,即规律性。从这几个角度讲,你大致就会接受那样的真实情形了:总结机

相关文章