`
xp9802
  • 浏览: 1183191 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

“md5+随机”方式加密

阅读更多
摘要:

1 加Salt散列
2 ASP.NET 2.0 Membership中与密码散列有关的代码

声明:本文所罗列之源代码均通过Reflector取自.NET Framework类库,引用这些代码仅出于学习和研究的目的。

其实,对密码进行散列存储不是一个新鲜话题了,解决起来也不是很难,但很多人还是不大了解。这个小文只是强调一下“加Salt散列”这个简单的技术,并给出ASP.NET Membership所使用的代码。

本来打算写一篇介绍如何实现用户登录功能的文章的,但因为时间有限,所以先介绍一下密码的散列,下一篇再介绍用户登录。

----

1 密码必须散列存储

(内容略)

2 加Salt散列

我们知道,如果直接对密码进行散列,那么黑客(统称那些有能力窃取用户数据并企图得到用户密码的人)可以对一个已知密码进行散列,然后通过对比散列值得到某用户的密码。换句话说,虽然黑客不能取得某特定用户的密码,但他可以知道使用特定密码的用户有哪些。

加Salt可以一定程度上解决这一问题。所谓加Salt,就是加点“佐料”。其基本想法是这样的——当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。

这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了(密码和salt值都得和黑客使用的一样才行)。

下面详细介绍一下加Salt散列的过程。介绍之前先强调一点,前面说过,验证密码时要使用和最初散列密码时使用“相同的”佐料。所以Salt值是要存放在数据库里的。


用户注册时:

1)用户提供密码(以及其他用户信息);
2)系统为用户生成Salt值;
3)系统将Salt值和用户密码连接到一起;
4)对连接后的值进行散列,得到Hash值;
5)将Hash值和Salt值分别放到数据库中。


登录时:
1)用户提供用户名和密码;
2)系统通过用户名找到与之对应的Hash值和Salt值;
3)系统将Salt值和用户提供的密码连接到一起;
4)对连接后的值进行散列,得到Hash'(注意有个“撇”);
5)比较Hash和Hash'是否相等,相等则表示密码正确,否则表示密码错误。

3 ASP.NET 2.0 Membership中的相关代码
(省略关于Membership的介绍若干字)
本文Anders Liu仅研究了SqlMembershipProvider,该类位于System.Web.dll,System.Web.Security命名空间中。
首先,要使用Membership,必须先用aspnet_regsql.exe命令来配置数据库,该工具会向现有数据库中添加一系列表和存储过程等,配置好的数据库中有一个表aspnet_Membership,就是用于存放用户帐户信息的。其中我们所关注的列有三个——Password、PasswordFormat和PasswordSalt。

Password存放的是密码的散列值,PasswordFormat存放用于散列密码所使用的算法,PasswordSalt就是系统生成的Salt值了。

网站安全了,程序自然也就复杂了...
     discuz的加密方式:md5(md5($password).$salt),$salt是一个6位随机数。
     注册的时候,把用户的密码用md5(md5($password).$salt)加密,$salt是一个6位随机数字,下面是我的一个获取6位随机数的一个方法:
     function randstr($len=6) {
     $chars='abcdefghijklmnopqrstuvwxyz0123456789';
// characters to build the password from
     mt_srand((double)microtime()*1000000*getmypid());
// seed the random number generater (must be done)
     $password='';
     while(strlen($password)<$len)
         $password.=substr($chars,(mt_rand()%strlen($chars)),1);
     return $password;
}
     $salt=randstr();把randstr()赋值给$salt,然后用md5(md5(会员提交的密码).$salt)加密就可以了,但是千万不要忘了把$salt入库哦(uc_members表)。
     登陆的时候根据用户名把$salt取出来,用md5(md5(会员提交的密码).$salt)匹配密码,如果一样就登陆成功了
2
1
分享到:
评论
4 楼 xp9802 2011-11-03  
有没有哪些老前辈说下,您们在以往的系统中,用到什么加密技术呢?
3 楼 xp9802 2011-11-03  
zc0604 写道
其实腾讯和新浪都是这么干的。。。

呵,可能他们的随机数不会那么简单
2 楼 zc0604 2011-11-03  
其实腾讯和新浪都是这么干的。。。
1 楼 xp9802 2011-11-03  
附上:
MD5不再安全?
    MD5不叫“加密”,叫“摘要”。别把MD5不安全跟可以解密混在一起。MD5在数学上就是不可解密的。md5单向加密,MD5是不可逆的。
    有些破解MD5的网站,原来他们的原理是,字典破解。因为他们有很多的值--密钥数据。所以,如果是公开的算法的话,怎么都是不安全的。无论是md5 还是 sha ,或者是 md5 + sha 。都会被收入字典,反向破解。
    最有有效的办法是,必须在md5或者sha基础上,再自行设置的一中算法,比如,加salt(一个随机串)。

相关推荐

    登陆加密MD5+Salt+SHA1附代码

    MD5 的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。 作用:把一个任意...

    php MD5 base64 crypt等加密函数用法集.rar

    //Sha1这种加密方式跟MD5相差不是很大都有一个$raw_output的可选参数,使用方法也是一样的,$raw_output参数为true返回以20字符长度的格式,否则返回40字符长度的16进制的数字  $str=urlencode('陈和群'); //...

    根据指定hash值寻键爆破脚本(Python实现)

    通过不断构建随机姓+随机名+固定学号前缀+随机学号后缀组成的合法键进行MD5散列求值,与目标散列值比较,相等则求解成功。 在本项目运行中可以发现,MD5散列的不可逆性大大影响了已知value求解key的效率。 运行指导...

    java常用工具类 Random随机数、MD5加密工具类

    主要为大家详细介绍了Java常用工具类,Random随机数工具类、MD5加密工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    API接口手工防御被恶意调用和接口被攻击

    接口参数的加解密,通过md5加密数据+时间戳+随机字符串(salt),然后将MD5加密的数据和时间戳、原数据均传到后台,后台规定一个有效时长,如果在该时长内,且解密后的数据与原数据一致,则认为是正常请求;也可以采用...

    基于SpringBoot + MySQL + Redis + RabbitMQ + Guava开发的高并发商品限时秒杀系统

    本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,...1. 两次MD5加密 将用户输入的密码和固定Salt通过MD5加密生成第一次加密后的密码,再讲该密码和随机生成

    c# 加密和解密相关代码

    添加一个Button 控件,用来使用MD5算法对输入的数据进行加密。 (3)程序主要代码如下: public string Encrypt(string strPwd) { MD5 md5 = new MD5CryptoServiceProvider(); //创建MD5 对象 byte[] data = System....

    jsp+servlet在线考试系统

    学生通过手机号码注册账户,密码MD5加密 登录系统进行考试(题目题库随机抽取) 3.教师后台登录系统阅卷(客观题系统自动判断得分,主观题教师给分,最后得出总分) 4.学生可以查看每次考试的试卷和分数;教师查看每次...

    著名的TomCrypt加密解密函数库

    MD5 (较为常用) SHA-1 SHA-224/256/384/512 (Rinick推荐) TIGER-192 RIPE-MD 128/160 WHIRLPOOL 信息认证 FIPS-198 HMAC (支持所有hash函数) CMAC, 也称OMAC1 (支持所有加密函数) PMAC Authentication...

    基于Qt的开源小项目,数据安全工具QuickEncrypt

    QuickEncrypt,数据安全小工具,采用托盘图标、悬浮窗、鼠标拖拽、右键菜单的简单操作模式,提供文件、文本的加解密(RC4+AES)、Hash(MD5+SHA1)、安全擦除等功能。独有的“智能压缩”加密模式。 1.功能介绍 对鼠标...

    一些加密摘要知识1

    md5加密是不安全的,因为现在世界上有专门的网站反查,所以需要加盐一般做法,比如用户注册账号时,得到密码,随机一个盐,然后用密码+盐的自定义排列组合做md5,然

    ASP + Serv-u 实现FTP的代码

    &lt;!–#include file=”md...但是我这里省略了) passWord = tmp & UCase(md5(passWord)) ‘密码,是MD5加密过的,用动网的MD5加密程序,具体算法是随机生成两位小写字母,然后和你的密码连接后进行MD5加密,把

    仿世纪佳缘婚介交友系统5.3 ASP+SQL

    这里提示银银32位密钥是通过md5加密32位,然后到网银在线设置。 其它未提及的设置项,基本可以从项目下文字说明理解到相关用途及含义。 2、二级域名管理(domain.asp) 很多客户初始安装之后都会发现很多网页...

    基于JavaWeb的期刊管理系统+课设报告.zip

    使用JavaWeb开发的数据库显示界面的课程设计,支持数据分页查询以及期刊的模糊搜索,首页采用动态二维码生成进行校验,支持上传图片,用户密码采用md5加密,支持期刊的分页显示。 )** **使用方法** : 这里...

    基于SSM框架开发的一款在线考试系统+源代码+文档说明

    密码采用MD5加密,找回密码功能 根据课程类型随机抽取数据库中的考试题库并显示试题 在考试过程中会有计时功能,时间到了之后自动交卷 在考生提交试卷后实现自动阅卷功能,并显示本次考试成绩的细节 查看以往...

    vc++ 应用源码包_5

    MD5算法 MediaPlayer 视频播放的实现。 MFC 对话框 MP3 内部包含:mp3播放器Lrc歌词同步源程序代码分析、mp3播放器+支持歌词同步显示哦、简单音乐播放器。 mfc 解码 视频音频解码部分。 MFC_MultiSender_OVER ...

    基于SpringBoot+Mybatis开发的主从架构的Steam商城,详情请看README+源代码+文档说明+数据库sql

    * 两次md5,对密码加密 * 分布式session,将用户的登录信息缓存在redis中 * 权限检查,每次操作在权限允许下才能进行 * 注册,需要邮箱验证码,邮箱验证码会在缓存中存在90s的时间 ## 2.页面数据 * 首页及其他页面...

    Mysql 自定义随机字符串的实现方法

    前几天在开发一个系统,需要用到随机字符串,但是mysql的库函数有没有直接提供,就简单的利用现有的函数东拼西凑出随机字符串来.下面简单的说下实现当时. ...md5() :对字符串进行Md5加密(单向),生成

    通用网络查询系统 v3.1

    姓名+身份证号)6、数据检索、初始化7、查询次数统计8、留言、回复、修改、删除、封停IP 信息安全1、管理用户密码MD5加密2、登录、留言的随机验证码,减少恶意登录3、外部提交检测,杜绝外部提交4、数据库地址隐藏、...

    node.js基于vue的移动端旅游网站的设计与实现131917(附源码+数据库)

    需要MD5加密 用户功能 注册登录(注册的时候要有一个随机数字、字母验证码,验证注册) 公告查看 搜索功能,用户可以搜索旅游景点 查看景点信息 门票预订,在线支付(门票预订的时候要有那种旅行团团票,因为该网站...

Global site tag (gtag.js) - Google Analytics