加密的盐

明文总是有一些不随机的冗余信息的,特别是公文、报告等格式文件。二战中,德军使用恩尼格玛ENIGMA转子密码机加密他们的电报,建立了一个在当时十分高效的加密系统。这一系统在战争前期给盟军的情报工作带来很大的麻烦。德军的一些定期报告有着固定的格式和行文模式,这些明文中的固定成分是盟军知道的。图灵发明的密钥分析机,利用了这些固定成分加速猜测过程和检验猜测结果。德国密码专家并非不知道这一点,ENIGMA密码机要求发报员先键入3个随机字符,然后才能键入明文。这三个随机字符会使密码机进入一个随机初态,以避免固定格式的报头输出相同的密文。不幸的是,德军发报员为了省事,常常使用固定的三个字符比如NNN作为扰码,这样,本来用来加强的扰码,成了盟军分析的突破口之一。固定的输入,使得输出密文完全由密钥控制。一方面攻击者能够预先造表,提高实时分析速度。另一方面,为自动破译机提供了终止条件,大大降低了分析工作量。对于有缺陷的算法,这种淡而无味的明文更是雪上加霜。

从信息论的角度,格式化的固定抬头等冗余信息的信息量是零,这样的明文(plane text)如同白开水(plane water)一样平淡无味。为了防止明文中的这种冗余性威胁密码安全,我们在明文的前面加上一段随机数,再进行加密处理。这段随机数使得相同的明文,相同的密钥仍然会输出不同的密文。这一段随机数给信息含量可能很低的明文,加入了一个确定的信息量。这段随机数使得明文不再平淡,我们把它称为盐。

盐参与加密运算,使得输出变得更难以捉摸。盐的熵决定了相同输入情况下,输出的变化可能性的量。n位长的盐,使得一个明文对应2n种可能的密文。拥有足够长的盐,将立即阻断查表攻击。盐的纯度会影响味道,加密也是如此。纯的盐来自硬随机数发生器,这不并总是为目标设备所拥有。合格的伪随机数发生器,也作为盐来源。评估加密性能时,盐的使用和来源是一个必须关注的事项。

openssl加密命令缺省会使用盐,盐值来自于openssl内置的随机数发生器。openssl 的enc对称加密命令加-p参数时,输出的salt:后面的值就是本次加密所用的盐。在程序排错过程中,相同明文对应的随机密文有时会带来不便,这时我们可以用-nosalt选项临时关闭盐,以期核对我们的输出值和格式是否合乎预期。

时间: 2024-07-30 13:47:07

加密的盐的相关文章

Shiro___加密加盐迭代

简单的模拟账号密码登入,为了简便就不去数据库真实的查询了 这里先使用MD5加盐迭代加密,算出我们的密码加密结果 MD5是不可逆的,单向加密,所以我们需要对原始数据进行加密后与加密的数据对比,而不是去解密 package com.test; import org.apache.shiro.crypto.hash.Md5Hash; /** * 对123456加密, * 盐值(salt):zsl * 迭代次数:6 * 加密结果:70fc2a964652cf72d7f67022a7951e51 * @a

php登录加密加盐

1         背景 涉及身份验证的系统都需要存储用户的认证信息,常用的用户认证方式主要为用户名和密码的方式,为了安全起见,用户输入的密码需要保存为密文形式,可采用已公开的不可逆的hash加密算法,比如SHA256, SHA512, SHA3等,对于同一密码,同一加密算法会产生相同的hash值,这样,当用户进行身份验证时,也可对用户输入的明文密码应用相同的hash加密算法,得出一个hash值,然后使用该hash值和之前存储好的密文值进行对照,如果两个值相同,则密码认证成功,否则密码认证失败.

MD5加密加盐

Java实现MD5的随机加盐加密,这样以来就很难解密了,必须使用原密码才能正常的登录系统了,以下为Java实现的MD5随机加盐加密,以及使用Apache的Hex类实现Hex(16进制字符串和)和字节数组的互转: 1 package com.dq.online.onlinezuul.util; 2 3 import org.apache.commons.codec.binary.Hex; 4 5 import java.security.MessageDigest; 6 import java.u

Linux安全与加密基础(一)

Linux安全与加密基础(一) 常见的加密算法 SSL: Openssl与CA认证 ssh服务 dropbear AIDE sudo 常见的加密算法 密码学古以有之,尤其是在中国古代的战争中,在现在科技中,密码学不得不说是一门高深的学问,普通人知其一二足矣:本文要讨论的是关于加密与解密的基本原理与应用,以及关于Linux系统中的一些安全管理问题,如ssh服务,监控系统关键文件是否被篡改,sudo提权等. 1.对称加密 所谓对称加密,就是同一个密钥可以同时用作信息的加密和解密. 常见的对称加密算法

对抗拖库 ―― Web 前端慢加密

0×00 前言 天下武功,唯快不破.但密码加密不同.算法越快,越容易破. 0×01 暴力破解 密码破解,就是把加密后的密码还原成明文密码.似乎有不少方法,但最终都得走一条路:暴力穷举.也许你会说还可以查表,瞬间就出结果.虽然查表不用穷举,但表的制造过程仍然需要.查表只是将穷举提前了而已. 密码加密,用的都是单向散列计算.既然单向,那就是不可逆,那只能穷举.穷举的原理很简单.只要知道密文是用什么算法加密的,我们也用相同的算法,把常用的词组跑一遍.若有结果和密文一样,那就猜中了. 穷举的速度有多快?

MD5加密Java工具类

原文:http://www.open-open.com/code/view/1421764946296 import java.security.MessageDigest; public class MD5 { //公盐 private static final String PUBLIC_SALT = "demo" ; //十六进制下数字到字符的映射数组 private final static String[] hexDigits = {"0", "

Spring 加密工具 Security3.1之后增强简化版

增强版对加密串增加到80位,没错产生的哈希值都不相同 package com.rapido.utils; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.StandardPasswordEncoder; /** * Spring 加密工具 Security3.1之后增强简化版,采用SHA-256算法,迭代

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

密码加盐

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生成加密密文