密码加SALT原理

原来这个技术叫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原理

时间: 2024-11-06 03:46:29

密码加SALT原理的相关文章

浅谈密码加SALT原理

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

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

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

openssl加解密原理及私有CA的建立

一.openssl加解密原理 数据加密解密过程数据加密需要实现的功能:数据私密性,数据完整性,身份认证和秘钥交换. 美国NIST,为了计算机的安全,提出了几个要求: 1.数据保密性   数据保密性   隐私性 2.完整性    数据完整性   系统完整性 3.可用性 4.真实性 && 可追溯性 OSI:x.800  安全攻击:   被动攻击:窃听   主动攻击:伪装.重播.消息修改.拒绝服务  安全机制:   加密.数字签名.访问控制.数据完整性.认证交换.流量填充.路由控制.公证  安全

Android中的Apk的加固(加壳)原理解析和实现

Android中的Apk的加固(加壳)原理解析和实现 标签: android 2015-09-13 13:58 42287人阅读 评论(49) 收藏 举报 本文章已收录于:  Android知识库  分类: Android(140)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一.前言 今天又到周末了,憋了好久又要出博客了,今天来介绍一下Android中的如何对Apk进行加固的原理.现阶段.我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个

数据加解密原理及私有CA的搭建以及撤销

简单罗列基础命令,只分享我的想法! 一.数据加/解密原理说明 客户端双方在互联网上通信,为了保证信息的安全,有了SSL协议,就是在TCP/IP模型传输层之上应用层之下,叫做安全的套接字层.目的就是为了把应用层的数据进行加密传递给客户端,而在Linux上实现这个协议或这个功能的软件就是OpenSSL. 原理其实就是,双方客户端的SSL层进行协商应用哪种加/解密的方式,ok,如果双方SSL达成一致,上层应用协议又通过SSL进行加密的话,那么双方在互联网上传输的数据就是加密的,这个加密之后的数据到达客

密码加盐

import java.security.MessageDigest;import java.util.Random; import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin; /** * @fileName Md5PasswordUtil.java * @Description 明文密码加密加盐操作 * 1:生成加密密码:首先使用randomSalt获取随机盐值,并保存;再将随机盐值和明文密码传入generate生成加密密文

Android加壳原理分析

0x00 阅读本文前,建议读者首先阅读Android加壳原理,参考文章Android中的Apk的加固(加壳)原理解析和实现.如果没有看过这篇文章,本文理解起来比较困难. 0x01 下面我们来分析脱壳代码为什么要这样写,核心脱壳代码在ProxyApplication类里面,首先执行成员方法attachBaseContext,然后执行成员方法onCreate. 那么attachBaseContext是什么时候被执行的呢,为什么先于onCreate执行呢?那就需要看Android的源码了,我们选用的是

AES CBC/CTR 加解密原理

So, lets look at how CBC works first. The following picture shows the encryption when using CBC (in this case, using AES as the cipher). Basically, Cipher-Block-Chaining means that previous to putting the cleartext data block into the cipher itself (

老调重弹:JDBC系列 之 &lt;驱动加载原理全面解析&gt;

前言 最近在研究Mybatis框架,由于该框架基于JDBC,想要很好地理解和学习Mybatis,必须要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来,好好总结一番,作为自己的笔记,也是给读者一个参考---以下是本文的组织结构,读者可以点击上面的目录查看: 概述 一般情况下,在应用程序中进行数据库连接,调用JDBC接口,首先要将特定厂商的JDBC驱动实现加载到系统内存中,然后供系统使用.基本结构图如下: 驱动加载入内存的过程 这里所谓的驱动,其实就是实现了java.sql.Driver