浅谈密码加SALT原理(转载)

原文出处:http://www.2cto.com/Article/201201/117051.html

我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如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值

时间: 2024-10-14 00:35:02

浅谈密码加SALT原理(转载)的相关文章

浅谈密码加SALT原理

我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码.  加Salt可以一定程度上解决这一问题.所谓加Salt方法,就是加点"佐料".其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些"佐料",然后再散列.而当用户登录时,系统为用户提供的代码撒上同样的"佐料",然后散列,再比较散列值,已确定密码是否正确.  这里的"佐

密码加SALT原理

原来这个技术叫SALT,以前我们经常这么用 ==================================================================================== 我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码. 加Salt可以一定程度上解决这一问题.所谓加Salt方法,就是加点“佐料”.其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往

浅谈密码存储安全

前言 用户信息泄露事件层出不穷,百度或谷歌输入"密码泄露",搜出来的泄密门更是让人目瞪口呆:从小公司到大公司,从明文存储到普通的哈希加密.作为一个IT从业者,我深刻感受到"得用户者得天下",尤其在互联网+盛行的趋势下.密码存储作为软件服务系统基础架构中不可缺少的一部分,越来越多的受到开发者的重视.对于一个服务,如果信息安全部分出问题,我想没有必要进一步去做用户体验的提升,性能的优化.进而也不可能获取大用户的青睐.还是那句话:出来混,迟早要还的. 本人并非密码学出生,

浅谈https\ssl\数字证书[转载]

在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: https:在http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议.http协议直接放置在TCP协议之上,而https提出在http和TCP中间加上一层加密层.从发送端看,这一层负责把http的内容加密后送到下层的TCP,从接收方看,这一层负责将TCP送来的数据解密还原成http的内容.

[转自SA]浅谈nginx的工作原理和使用

nginx apache 简单对比 nginx 相对 apache 的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而 apache 则是阻塞型的,在高并发下 nginx 能保持低资源低消耗高性能 高度模块化的设计,编写模块相对简单 社区活跃 配置简洁 apache 相对nginx 的优点: rewrite ,比 nginx 的 rewrite 强大 模块超多 少 bug ,nginx 的 bug 相对较多 超稳定 配置复杂

TODO:浅谈pm2基本工作原理

要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系. 撒旦(Satan),主要指<圣经>中的堕天使(也称堕天使撒旦),他是反叛上帝耶和华的堕天使(Fallen Angels),曾经是上帝座前的天使,后来他因骄傲自大妄想与神同等而堕落成为魔鬼,被看作与上帝的力量相对的邪恶.黑暗之源. 简单的说Satan是破坏神,就是进程的异常退出.kill等:God是守护神,保护进程.重启进程等. 一图胜千言,pm2的 RPC基本框架.Client与Daemon是采用了R

浅谈JavaScript DDOS 攻击原理与防御

前言 DDoS(又名"分布式拒绝服务")攻击历史由来已久,但却被黑客广泛应用.我们可以这样定义典型的DDoS攻击:攻击者指使大量主机向服务器发送数据,直到超出处理能力进而无暇处理正常用户的合法请求,最终导致用户无法正常访问网站. 近年来,DDoS攻击手段已日趋多元化——攻击者通过各种奇技淫巧诱使不知情主机参加攻击.比如,[注1]历史上数据量最大(超过400Gbps)的DDoS攻击就是通过[注2]NTP反射完成的.时至今日,我们已经发现一个令人不安的趋势:攻击者通过恶意的JavaScri

JAVA NIO之浅谈内存映射文件原理与DirectMemory

Java类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段.本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原理. 在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数  read().write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然后OS的内核代码负责将相应的文件数据读取到内核的IO缓冲区,然后再把数据从内核IO缓冲区拷贝到进程的私有

浅谈JAVA集合框架(转载)_常用的Vector和HashMap

原作者滴着:http://www.cnblogs.com/eflylab/archive/2007/01/20/625237.html Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes).集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题. 1 Collection 和 Collections的区别. 2 List, Set, Map是否继承自