密码安全之动态盐

首先,我们看看什么是盐:http://zh.wikipedia.org/zh/%E7%9B%90_%28%E5%AF%86%E7%A0%81%E5%AD%A6%29

通常情况下,当字段经过散列处理(如MD5),会生成一段散列值,而散列后的值一般是无法通过特定算法得到原始字段的。但是某些情况,比如一个大型的彩虹表,通过在表中搜索该MD5值,很有可能在极短的时间内找到该散列值对应的真实字段内容。

加盐后的散列值,可以极大的降低由于用户数据被盗而带来的密码泄漏风险,即使通过彩虹表寻找到了散列后的数值所对应的原始内容,但是由于经过了加盐,插入的字符串扰乱了真正的密码,使得获得真实密码的概率大大降低。

但是很多人没意识到的是静态盐仍然不够安全。因为静态盐要面临两种攻击:

1,基于特定的静态盐,可以生成特定的彩虹表.

2,对静态盐处理过的散列密码,可以按出现频率进行排序,最常出现的散列密码,对应的明文密码必然还是那些111111、123456之类的。

因此,对于重要的账号密码,我们需要采用动态盐来对密码进行混淆。一个常用做法就是把账号名进行MD5之后,作为动态盐。则上述两种攻击将失效。

比如,用户名是wsq,对应的md5是4572381974328f9c作为动态盐,密码是123456,加上动态盐之后为4572381974328f9c123456,再MD5是d16e970d6e5b95b9。则最终的计算结果是无法猜测的(unguessable)

时间: 2024-07-30 06:31:38

密码安全之动态盐的相关文章

国家商业密码算法开放动态库及演示程序

 开放动态库支持如下国家商业密码算法:SM2.SM3.SM4,同时也支持AES对称加密算法. 下载地址: 国家商业密码算法开放动态库及演示程序C#语言版 国家商业密码算法开放动态库及演示程序Java语言版 当前提供的语言版本: C#语言版本,其开发环境为:Visual Studio V2013..NET Framework 4.5 Java语言版本,其开发环境为:NetBeans 8.0.2.JDK 8u45 C/C++语言版本:暂不开放 Qt版本:暂不开放 算法说明 SM2: 支持P-25

password安全之动态盐

首先,我们看看什么是盐:http://zh.wikipedia.org/zh/%E7%9B%90_%28%E5%AF%86%E7%A0%81%E5%AD%A6%29 通常情况下,当字段经过散列处理(如MD5),会生成一段散列值,而散列后的值通常是无法通过特定算法得到原始字段的.可是某些情况,比方一个大型的彩虹表,通过在表中搜索该MD5值,非常有可能在极短的时间内找到该散列值相应的真实字段内容. 加盐后的散列值,能够极大的减少因为用户数据被盗而带来的password泄漏风险,即使通过彩虹表寻找到了

给某单位的远程接入动态密码认证 建设方案

目         录 一.       远程接入身份认证应用概述.... 3 2.1         远程接入身份认证应用现状... 3 2.2         双因素认证方案建设意见... 3 2.3         认证双因素基本原理... 5 二.       身份认证解决方案.... 5 3.1         动联身份认证系统介绍... 6 3.1.1          认证服务... 7 3.1.2          管理中心... 9 3.1.3          动码令. 12

[转]加盐hash保存密码的正确方式

0x00 背景 大多数的web开发者都会遇到设计用户账号系统的需求.账号系统最重要的一个方面就是如何保护用户的密码.一些大公司的用户数据库泄露事件也时有发生,所以我们必须采取一些措施来保护用户的密码,即使网站被攻破的情况下也不会造成较大的危害.保护密码最好的的方式就是使用带盐的密码hash(salted password hashing).对密码进行hash操作是一件很简单的事情,但是很多人都犯了错.接下来我希望可以详细的阐述如何恰当的对密码进行hash,以及为什么要这样做. 0x01 重要提醒

密码的加盐加密

我们 所 使用密码的加密方式 大多为md5 加密  但是一些不法分子 利用 云计算 分布式计算 可以暴力破解我们的密码 我们通过 加入盐值的方式 加密 密码使得密码 不会被轻易破解 1 //对密码进行加盐加密 2 $password = $this->data['password']; 3 //生成盐值 随机生成几个字符串 4 $altToken = md5(String::randString(10)); 5 //加入盐值 6 $password = md5($password.$altTok

(六)SSO之CAS框架扩展 修改CAS源码实现与ESS动态密码验证对接

题记: 偶尔的偶尔我们会听到这个网站的数据泄露了,那个网站的用户数据泄露了,让用户重新修改登录密码,所以,对于用户数据安全性越发的引起我们的重视了,尤其是一些保密性要求高的网站,更需要增加安全性了. 正文: 对于安全性问题,我们如何解决呢? 解决方案: 1.避免sql注入问题. 2.用户登录密码加密. 3.使用https安全访问方式. 4.使用第三方设备,像银行一般使用的密码口令. 5.... 前三种方案是比较常见的,这里主要说第四种解决方案,我们在前三种方案的基础上,使用了第三方的设备,就像网

Java 密码加盐

只对密码进行md5加密很容易反推出来,另外两个用户的密码相同时,数据库保存相同的密码.解决方法是在用户的短密码后面加上一段长字符,再计算 md5,这样反推出原始密码就变得非常困难,而且即使两个用户密码相同,数据库保存的密码也不一样.加上的这段长字符,称为盐(Salt),通过这种方式加密的结果,称为 加盐 Hash. 使用例子:假设有两个用户admin和abc,密码都为123456,注册时,盐取用户名+一个MD5值.最终计算出来的密码不一样. package com.example.shiro;

【Java编码准则】の #13使用散列函数保存密码

明文保存密码的程序在很多方面容易造成密码的泄漏.虽然用户输入的密码一般时明文形式,但是应用程序必须保证密码不是以明文形式存储的. 限制密码泄漏危险的一个有效的方法是使用散列函数,它使得程序中可以间接的对用户输入的密码和原来的密码进行比较,而不需要保存明文或者对密码进行解密后比较.这个方法使密码泄漏的风险降到最低,同时没有引入其他缺点. [加密散列函数] 散列函数产生的值称为哈希值或者消息散列,散列函数是计算可行函数,但反过来是计算不可行的.事实上,密码可以被编码为一个哈希值,但哈希值不能被解码成

用户密码加密存储十问十答,一文说透密码安全存储

我们数据库的权限管理十分严格,敏感信息开发工程师都看不到,密码明文存储不行吗? 不行.存储在数据库的数据面临很多威胁,有应用程序层面.数据库层面的.操作系统层面的.机房层面的.员工层面的,想做到百分百不被黑客窃取,非常困难. 如果密码是加密之后再存储,那么即便被拖库,黑客也难以获取用户的明文密码.可以说,密码加密存储是用户账户系统的底裤,它的重要性,相当于你独自出远门时缝在内衣里钱,虽然你用到他们的概率不大,但关键时刻他们能救命. 那用加密算法比如AES,把密码加密下再存,需要明文的时候我再解密