随机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‘是否相等,相等则表示密码正确,否则表示密码错误。

随机salt二次加密,码迷,mamicode.com

时间: 2024-10-22 18:29:42

随机salt二次加密的相关文章

spring 加密 Druid 连接池(二)—— 加密 url,driverClassName,用户名,密码

why? 连接信息暴露在配置文件中有风险 how? 一.准备加密后连接信息 使用Druid自带工具类ConfigTools加密连接信息 import com.alibaba.druid.filter.config.ConfigTools; public class DecryptDruid { public DecryptDruid() { super(); // TODO Auto-generated constructor stub } public static void main(Str

javascript md5 二次加密 和 java md5 二次加密结果不同

最近研究httpclient post 时遇到了一个问题,很费解. js  md5(str) 和 java md5(str),第一次md5 加密结果一样,(当时忽略了大小写问题,java 大写,js小写). 但是 js      md5( md5(str) ), java   md5( md5(str) ) 也就是说第二次 md5 加密确又不一样了. 当时很无语,第一次一样,第二次为什么又 不一样了呢? 原来是大小写问题,md5 加密,都是网上找的代码,第一次md5加密,java返回结果是大写,

随机生成二维高斯分布类簇

mu = [11,10]; sigma = [5,0;0 5]; rng default % For reproducibility r1 = mvnrnd(mu,sigma,100); mu = [15,15]; sigma = [2,0;0,5]; r2 = mvnrnd(mu,sigma,100); mu = [20,15]; sigma = [5,0;0,2]; r3 = mvnrnd(mu,sigma,100); X=[r1;r2;r3]; y=[ones(size(r1,1),1);

LabView随机生成二维数组

ROS二次加密登陆系统正式发布!!!

http://sn142.gz01.bdysite.com 增强安装性,多一道登陆,就增加了入侵的难度! /ip service set 2 port=800 set 6 port=55555 ena 2,6 /tool netwatch add host=8.8.8.8 interval=1m down-script="/ip firewall filter dis [find comment=login]" /ip firewall mangle add chain=input p

区块链入门教程以太坊源码分析p2p-rlpx节点之间的加密链路二

// Sign known message: static-shared-secret ^ nonce // 这个地方应该是直接使用了静态的共享秘密. 使用自己的私钥和对方的公钥生成的一个共享秘密. token, err = h.staticSharedSecret(prv) if err != nil { return nil, err } //这里我理解用共享秘密来加密这个initNonce. signed := xor(token, h.initNonce) // 使用随机的私钥来加密这个

对称加密与非对称加密

(一)对称加密(Symmetric Cryptography) 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中. 对称加密通常使用的是相对较小的密钥,一般小于256 bit.因为密钥越大,加密越强,但加密与解密的过程越慢.如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解:但如果你的密钥有1 MB

Shiro加密

在开发的时候,很多数据我们都希望是以加密过后的形式存储起来,而不是最原始的数据. 在shiro中也提供了编码,解码,加密,加密算法实现等等一系列的内容. 编码/解码 在org.apache.shiro.codec包中,提供了Base64,16进制等的编码解码工具类的实现. package com.fuwh.demo; import org.apache.shiro.codec.Base64; import org.apache.shiro.codec.Hex; public class Code

流媒体加密(1)

http://www.jiamisoft.com/blog/11238-liumeitijiamijishu.html 随着Internet的飞速发展和网上多媒体应用的普及,数字版权和隐私权的保护已成了一个愈来愈令人关注的问题,媒体资源的安全 也就成了一个热点的研究课题,而加密技术是保护媒体资源安全最重要的技术手段之一.笔者从传统密码技术入手,在结合流式媒体的特征基础上对其加密/解密机 制进行了深入的研究目的是将传统的密码技术与新兴的流媒体技术相结合,实现多媒体数据的实时加密保护. 一.用常规密