这个hashset取值值如何解开

使用哈希加盐法来为密码加密 - JF Zhu - 博客园
原创地址:
转载请注明出处
(一)为什么要用哈希函数来加密密码
如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,象下面那样直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将可以直接看到这些密码。
解决的办法是将密码加密后再存储进数据库,比较常用的加密方法是使用哈希函数(Hash Function)。哈希函数的具体定义,大家可以在网上或者相关书籍中查阅到,简单地说,它的特性如下:
(1)原始密码经哈希函数计算后得到一个哈希值
(2)改变原始密码,哈希函数计算出的哈希值也会相应改变
(3) 同样的密码,哈希值也是相同的
(4) 哈希函数是单向、不可逆的。也就是说从哈希值,你无法推算出原始的密码是多少
有了哈希函数,我们就可以将密码的哈希值存储进数据库。用户登录网站的时候,我们可以检验用户输入密码的哈希值是否与数据库中的哈希值相同。
由于哈希函数是不可逆的,即使有人打开了数据库,也无法看到用户的密码是多少。
那么存储经过哈希函数加密后的密码是否就是安全的了呢?我们先来看一下几种常见的破解密码的方法。
(二)几种常见的破解密码的方法
最简单、常见的破解方式当属字典破解(Dictionary Attack)和暴力破解(Brute Force Attack)方式。这两种方法说白了就是猜密码。
字典破解和暴力破解都是效率比较低的破解方式。如果你知道了数据库中密码的哈希值,你就可以采用一种更高效的破解方式,查表法(Lookup Tables)。还有一些方法,比如逆向查表法(Reverse Lookup Tables)、彩虹表(Rainbow Tables)等,都和查表法大同小异。现在我们来看一下查表法的原理。
查表法不像字典破解和暴力破解那样猜密码,它首先将一些比较常用的密码的哈希值算好,然后建立一张表,当然密码越多,这张表就越大。当你知道某个密码的哈希值时,你只需要在你建立好的表中查找该哈希值,如果找到了,你就知道对应的密码了。
(三)为密码加盐(Salt)
从上面的查表法可以看出,即便是将原始密码加密后的哈希值存储在数据库中依然是不够安全的。那么有什么好的办法来解决这个问题呢?答案是加盐。
盐(Salt)是什么?就是一个随机生成的字符串。我们将盐与原始密码连接(concat)在一起(放在前面或后面都可以),然后将concat后的字符串加密。采用这种方式加密密码,查表法就不灵了(因为盐是随机生成的)。
(四)在.NET中的实现
在.NET中,生成盐可以使用RNGCryptoServiceProvider类,当然也可以使用GUID。哈希函数的算法我们可以使用SHA(Secure Hash Algorithm)家族算法,当然哈希函数的算法有很多,比如你也可以采用MD5。这里顺便提一下,美国政府以前广泛采用SHA-1算法,在2005年被我国山东大学的王小云教授发现了安全漏洞,所以现在比较常用SHA-1加长的变种,比如SHA-256。在.NET中,可以使用SHA256Managed类。
下面来看一段代码演示如何在.NET中实现给密码加盐加密。加密后的密码保存在MySQL数据库中。
下面的代码演示如何注册一个新帐户。盐的生成可以使用新Guid,也可以使用RNGCryptoServiceProvider 类。将byte[]转换为string,可以使用Base64String(我在以前的博客中介绍过),也可以使用下面的ToHexString方法。
protected void ButtonRegister_Click(object sender, EventArgs e)
string username = TextBoxUserName.T
string password = TextBoxPassword.T
// random salt
string salt = Guid.NewGuid().ToString();
// random salt
// you can also use RNGCryptoServiceProvider class
//System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
//byte[] saltBytes = new byte[36];
//rng.GetBytes(saltBytes);
//string salt = Convert.ToBase64String(saltBytes);
//string salt = ToHexString(saltBytes);
byte[] passwordAndSaltBytes = System.Text.Encoding.UTF8.GetBytes(password + salt);
byte[] hashBytes = new System.Security.Cryptography.SHA256Managed().ComputeHash(passwordAndSaltBytes);
string hashString = Convert.ToBase64String(hashBytes);
// you can also use ToHexString to convert byte[] to string
//string hashString = ToHexString(hashBytes);
var db = new TestEntities();
usercredential newRecord = usercredential.Createusercredential(username, hashString, salt);
db.usercredentials.AddObject(newRecord);
db.SaveChanges();
string ToHexString(byte[] bytes)
var hex = new StringBuilder();
foreach (byte b in bytes)
hex.AppendFormat("{0:x2}", b);
return hex.ToString();
下面的代码演示了如何检验登录用户的密码是否正确。首先检验用户名是否存在,如果存在,获得该用户的盐,然后用该盐和用户输入的密码来计算哈希值,并和数据库中的哈希值进行比较。
protected void ButtonSignIn_Click(object sender, EventArgs e)
string username = TextBoxUserName.T
string password = TextBoxPassword.T
var db = new TestEntities();
usercredential record = db.usercredentials.Where(x =& string.Compare(x.UserName, username, true) == 0).FirstOrDefault();
if (record == default(usercredential))
throw new ApplicationException("invalid user name and password");
string salt = record.S
byte[] passwordAndSaltBytes = System.Text.Encoding.UTF8.GetBytes(password + salt);
byte[] hashBytes = new System.Security.Cryptography.SHA256Managed().ComputeHash(passwordAndSaltBytes);
string hashString = Convert.ToBase64String(hashBytes);
if (hashString == record.PasswordHash)
// user login successfully
throw new ApplicationException("invalid user name and password");
(五)总结
单单使用哈希函数来为密码加密是不够的,需要为密码加盐来提高安全性,盐的长度不能过短,并且盐的产生应该是随机的。
评论 - 192后使用快捷导航没有帐号?
重定义Modern UI,打造完美Windows全新体验
查看: 1988|回复: 12
积分25最后登录精华0阅读权限10主题UID810205帖子PB币134 威望0 贡献0 技术2 活跃149
PCBETA Alpha, 积分 25, 距离下一级还需 25 积分
UID810205帖子PB币134 贡献0 技术2 活跃149
无论是迅雷下载还是百度网盘下载,哈希值都是SHA1:E23AB2D01ACDBFD5A1E05BDF369EAAF
而不是官方面的SHA1:F44B2BBD1F6F243DAAE172FA8C1DB342CB98EDAA
积分25最后登录精华0阅读权限10主题UID810205帖子PB币134 威望0 贡献0 技术2 活跃149
PCBETA Alpha, 积分 25, 距离下一级还需 25 积分
UID810205帖子PB币134 贡献0 技术2 活跃149
下载的是专业版&标准版(x64)
Windows 8.1 with Update (multiple editions) (x64) - DVD (Chinese-Simplified)
SHA1:F44B2BBD1F6F243DAAE172FA8C1DB342CB98EDAA
cn_windows_8.1_with_update_x64_dvd_4048046.iso (4 GB)
百度盘:链接:
密码: cucb
积分25最后登录精华0阅读权限10主题UID810205帖子PB币134 威望0 贡献0 技术2 活跃149
PCBETA Alpha, 积分 25, 距离下一级还需 25 积分
UID810205帖子PB币134 贡献0 技术2 活跃149
同样下载的企业版也是哈希值不一致
&换个下载软件&
积分18最后登录精华0阅读权限10主题UID2343599帖子PB币27 威望0 贡献0 技术0 活跃30
PCBETA Alpha, 积分 18, 距离下一级还需 32 积分
UID2343599帖子PB币27 贡献0 技术0 活跃30
跟楼主一样,用迅雷、Safari、Chrome都下过了,三遍都是e23ab2d01acdbfd5a1e05bdf369eaaf……
积分7220最后登录精华0阅读权限205主题UID2675209帖子PB币32524 威望338 贡献0 技术4684 活跃1133
幼儿园未毕业
UID2675209帖子PB币32524 贡献0 技术4684 活跃1133
i66 发表于
下载的是专业版&标准版(x64)
Windows 8.1 with Update (multiple editions) (x64) - DVD (Chinese-Simpl ...
我自己上传后又重新下载了,
文件名称:D:\System\System_install\cn_windows_8.1_with_update_x64_dvd_4048046.iso
文件大小: 字节
MD5& &&&:AECBF7BB09AB86C960A61D0
SHA1& & :F44B2BBD1F6F243DAAE172FA8C1DB342CB98EDAA
CRC32& &:206FDA47
积分7220最后登录精华0阅读权限205主题UID2675209帖子PB币32524 威望338 贡献0 技术4684 活跃1133
幼儿园未毕业
UID2675209帖子PB币32524 贡献0 技术4684 活跃1133
不知道楼主是什么情况啊,把浏览器ua改成手机版,用浏览器直接下载了试试看
积分264最后登录精华0阅读权限30主题UID2715374帖子PB币614 威望5 贡献0 技术7 活跃458
PCBETA Beta1, 积分 264, 距离下一级还需 236 积分
UID2715374帖子PB币614 贡献0 技术7 活跃458
额,不能开离线的,我开始用QQ旋风开的离线下载的,也是SHA1不对,然后用迅雷下载,没用离线,4M小水管用200kb的速度下载了好久,然后发现sha1是对的
积分18最后登录精华0阅读权限10主题UID2343599帖子PB币27 威望0 贡献0 技术0 活跃30
PCBETA Alpha, 积分 18, 距离下一级还需 32 积分
UID2343599帖子PB币27 贡献0 技术0 活跃30
跟楼主同样的状况,SHA1跟楼主的一样,试过迅雷、Safari、Chrome了。。
积分7220最后登录精华0阅读权限205主题UID2675209帖子PB币32524 威望338 贡献0 技术4684 活跃1133
幼儿园未毕业
UID2675209帖子PB币32524 贡献0 技术4684 活跃1133
weidute 发表于
跟楼主同样的状况,SHA1跟楼主的一样,试过迅雷、Safari、Chrome了。。
从这个链接下载试试看http://hot./file/aecbf7bb09ab86c960a61d0?xcode=3eef9a7cd296b09fc147c39fcf&fid=322779&time=&sign=FDTAXER-DCb740cccfedcff06b081203-PWKoatDSGikhAgHx%2F5PlOSHWJPo%3D&to=hc&fm=N,B,T,t&newver=1&expires=&rt=sh&r=&logid=&sh=1&vuk=&fn=cn_windows_8.1_with_update_x64_dvd_4048046.iso复制代码
积分25最后登录精华0阅读权限10主题UID810205帖子PB币134 威望0 贡献0 技术2 活跃149
PCBETA Alpha, 积分 25, 距离下一级还需 25 积分
UID810205帖子PB币134 贡献0 技术2 活跃149
我发现是测试工具的问题了,看看对比,HashCheck瞬间完成检测,SHA1值是:E23AB2D01ACDBFD5A1E05BDF369EAAF
而Hash测试文件较慢,SHA1值是:F44B2BBD1F6F243DAAE172FA8C1DB342CB98EDAA
因此下载的文件是正确的。
16:50 上传
积分25最后登录精华0阅读权限10主题UID810205帖子PB币134 威望0 贡献0 技术2 活跃149
PCBETA Alpha, 积分 25, 距离下一级还需 25 积分
UID810205帖子PB币134 贡献0 技术2 活跃149
17:04 上传
积分25最后登录精华0阅读权限10主题UID810205帖子PB币134 威望0 贡献0 技术2 活跃149
PCBETA Alpha, 积分 25, 距离下一级还需 25 积分
UID810205帖子PB币134 贡献0 技术2 活跃149
我发现是测试工具的问题了,看看对比,HashCheck瞬间完成检测,SHA1值是:E23AB2D01ACDBFD5A1E05BDF369EAAF
而Hash测试文件较慢,SHA1值是:F44B2BBD1F6F243DAAE172FA8C1DB342CB98EDAA
因此下载的文件是正确的。
17:05 上传
(44.8 KB, 下载次数: 16)
17:05 上传
下载次数: 16
积分18最后登录精华0阅读权限10主题UID2343599帖子PB币27 威望0 贡献0 技术0 活跃30
PCBETA Alpha, 积分 18, 距离下一级还需 32 积分
UID2343599帖子PB币27 贡献0 技术0 活跃30
s1025xfei 发表于
从这个链接下载试试看
解决了,就是10楼说的,检测工具的问题……
8周年庆典勋章
#没攀过峻岭,何以览美景#
本活动将于北京时间日0:00准时开启,敬请期待!
关注远景官方微信
Copyright (C) 2005-, All rights reserved
Powered by Discuz!&&沪ICP备号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。哈希值 HASH_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
哈希值 HASH
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢

我要回帖

更多关于 hash值 的文章

 

随机推荐