`
mmdev
  • 浏览: 12927920 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

浅谈密码加salt原理

 
阅读更多
我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。
  加Salt可以一定程度上解决这一问题。所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。
  这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了(密码和salt值都得和黑客使用的一样才行)。
下面以PHP示例,讲解md5($pass.$salt)加密函数。
<?php
function hash($a) {
$salt=”Random_KUGBJVY”; //定义一个salt值,程序员规定下来的随机字符串
$b=$a.$salt; //把密码和salt连接
$b=md5($b); //执行MD5散列
return $b; //返回散列
}
?>
  调用方式:$new_password=hash($_POST[password]); //这里接受表单提交值,并进行加密
  下面详细介绍一下加Salt散列的过程。介绍之前先强调一点,前面说过,验证密码时要使用和最初散列密码时使用“相同的”佐料。所以Salt值是要存放在数据库里的。
用户注册时,
用户输入【账号】和【密码】(以及其他用户信息);系统为用户生成【Salt值】;系统将【Salt值】和【用户密码】连接到一起;对连接后的值进行散列,得到【Hash值】;将【Hash值1】和【Salt值】分别放到数据库中。
用户登录时,
用户输入【账号】和【密码】;系统通过用户名找到与之对应的【Hash值】和【Salt值】;系统将【Salt值】和【用户输入的密码】连接到一起;对连接后的值进行散列,得到【Hash值2】(注意是即时运算出来的值);比较【Hash值1】和【Hash值2】是否相等,相等则表示密码正确,否则表示密码错误。
有时候,为了减轻开发压力,程序员会统一使用一个salt值(储存在某个地方),而不是每个用户都生成私有的salt值。

分享到:
评论

相关推荐

    深入密码加salt原理的分析

    本篇文章是对密码加salt原理进行了详细的分析介绍,需要的朋友参考下

    使用密码和salt值联合密码加密实现登录注册功能

    使用密码和salt值联合密码使用md5加密实现登录注册功能,有界面、数据库、java实现

    salt_hash.zip_Node.js_密码加密与解密_密码加盐

    1.使用Node.js中的crypto模块加密用户密码和加盐,加密密码和原始密码验证。 2.使用Node.js中的crypto模块对字符串进行加密和解密,采用非对称加密方式。

    浅谈discuz密码加密的方式

    比如我的密码是123456 复制代码 代码如下:echo md5(“123456”);  会输出: 复制代码 代码如下:e10adc3949ba59abbe56e057f20f883e 而数据库的值却为: 复制代码 代码如下:7839dc9437013b5c11a5d86e9b8350e9  注意...

    C#使用 Salt + Hash 来为密码加密

    本文主要介绍了几种常见的破解密码的方法,为密码加盐(Salt)以及在.NET中的实现等。具有一定的参考价值,下面跟着小编一起来看下吧

    如何给MD5加上salt随机盐值

    不知道大家知不知道,在开发的时候如果直接给密码散列,黑客可以通过查散列值字典(例如MD5密码破解网站),得到某用户的密码。但如果加上salt后就会难上很多,即便是你获得了其中的salt和最终密文,破解也是相当麻烦...

    使用 Salt + Hash 将密码加密后再存储进数据库

    如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,象下面那样直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将可以直接看到这些密码。 解决的办法是将密码加密后再...

    Salt.Essentials.1491900636

    Get a complete introduction to Salt, the widely used Python-based configuration management and remote execution tool. This practical guide not only shows system administrators how to manage complex ...

    Adaucogit Salt (3D全自动标注) v2.1

    Adaucogit Salt 不仅提供2D全系列的自动标注尺寸(线性自动标注、坐标式自动标注、孔自动列表….),另外还有3D的全自动标注尺寸。 我们知道使用AutoCAD来标注三维尺寸,你必须随时改变UCS平面来标注适合的尺寸位置,...

    Salt.Cookbook.1784399744

    Chapter 1: Salt Architecture and Components Chapter 2: Writing Advanced Salt Configurations Chapter 3: Modules, Orchestration, and Scaling Salt Chapter 4: General Administration Tasks Chapter 5: ...

    RSA+MD5+salt 加密 支持sql 和access数据库

    RSA加密工具 利用RSA+MD5+salt 加密后 可以导出csv文件,加密的csv文件可以导入进行解密

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

    答案是加盐。 Salt是什么?就是一个随机生成的字符串。我们将盐与原始密码连接(concat)在一起(放在前面或后面都可以),然后将concat后的字符串加密。采用这种方式加密密码,查表法就不灵了(因为盐是随机生成的...

    MD5加密工具包可配置salt值

    MD5加密工具类,内置注释代码,可以调用配置文件,通过文件设置salt,增加破解难度。

    爆破带salt的md5

    指定字典目录或者字典路径,软件会自动爆破带salt值的md5,速度根据电脑配置而定 指定字典目录或者字典路径,软件会自动爆破带salt值的md5,速度根据电脑配置而定 指定字典目录或者字典路径,软件会自动爆破带salt值的...

    Oracle SALT安装文档

    Oracle SALT安装文档,针对10g以上

    salt文档(0.11)

    salt基于python开发的自动化运维工具。

    salt-django-example, Django 部署的salt状态树示例.zip

    salt-django-example, Django 部署的salt状态树示例 salt-django-example将 Django 应用程序部署到生产服务器的salt状态树。堆栈__Ubuntu: 包名称和堆栈的其他部分只与Ubuntu一起使用为wsgi容器提供反向代理,并为 ...

    Salt-手册

    Salt 手册

Global site tag (gtag.js) - Google Analytics