MD5加密
Message Digest Algorithm 消息摘要算法。
->压缩性:任意长度的数据,都能转换成16个16进制影射的字符串. 及128位。
->容易计算:从原数据计算出MD5
->抗修改性能:哪怕只修改一个字节,所得到的MD5值都是有很大的区别。
->强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(及伪造数据)是非常困难的。
2.MD5值的作用是为乐让大容量信息在用 数字签名 私人密钥 前辈压缩成一种保密的格式(把一任意长度的字节串转化为16个16进制组成的数字串),128bit。
//
3.发展历史:
Rivest在1989年开发出MD2算法,在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。然后用一个16位的检验和追加到信息末位.并且根据这个新产生的信息计算出散列值。
4.算法原理:
对MD5算法简要的叙述可以位:
总的流程:512bit/组->分割成16个32位的分组->经过一系列的处理后->输出4个32位的分组->将这4个32位分组级联后生成一个128位的三列值。
a. 填充:在MD5算法中首先需要对信息进行填充,使其位长度对512求余的结果等于448. 及信息位位N* 512 + 448,N为一个非负整数,N可以是零。
1)在信息后面填充一个1和无数的0,直到满足上面条件时才停止用0对信息进行填充。
2)在这个结果后面附加一个以64位二进制表示的填充前信息长度。如果二
进制表示的填充前信息长度超过64位,则取低64位。
经过两部处理,信息位的长 = N* 512 +448 + 64 = (N+1)*512。
长度恰好为512的整数倍。
b. 初始化变量
1)初始化128位值位初始链接变量,这些参数用于第一轮的运算。以大端字节序来表示,他们分别为: A=0x01234567,B=0x89ABCDEF,C=0xFEDCBA98,D=0x76543210。
....
SHA加密
1.SHA:Secure Hash Algorithm
主要适用于数字签名标准(Digital Signature Standard DSS),里面定义的数字签名算法(Digital Singature Algorithm DSA).对于长度小于2^64位的消息,SHA会产生一个160位的消息摘要。
该方法主要是用来接收一段名文,将它以一种不可逆的方式转换为秘文,它可以简单的理解为存取一串输入码(称为预映射或信息)。并把它转化为长度较短,位数固定的输出序列
SHA-160,SHA-224和SHA-256适用于长度不超过264二进制位的消息。SHA-384和SHA-512适用于长度不超过2128二进制位的消息。
2.SHA-1和MD5的比较,SHA-1与MD5非常相似。
SHA-1比MD5摘要长32位,分别为2^160 和 2^128的数量操作级
l 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
l 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
DES 明文块64bit(含1校验位)
1.DES全称为Data Encrytion Standard,即数据加密标准,是一种秘钥加密的块算法。
2.DES的算法入口, Data,Key,Model. 其中key为7个字节共56位.是DES算法的工作秘钥。Data位8个字节64位。是要被加密和解密的数据。Model为DES的工作方式,有加密和解密。
3.DES的基本原则:设计中使用了分组设计的两个基本原则:混淆(confusion)和扩散(diffusion)
4.DES算法吧64位的明文输入块变为64位的秘文输入块,它所使用的秘钥也是64位(key位7个字节共56位)。实际用到了56位(第8,16,24,32,40,56,64是校验位,使得每个秘钥都有一个奇数个1)。其算法主要分为两个步骤;
a.初始置换:其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位
b. 经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。
AES
1.AES的区块长度固定为128位。 44的矩阵 16bytes 8bit上运作。
2.秘钥长度可以是128或者192,或者256位
AddRoundKey->矩阵中每个字节都与改次轮秘钥roundKey做XOR运算,每个子秘钥由秘钥生成规则来生成。
SubBytes-通过非线性的替换函数,用查找表的方式将每个字节替换成对应的字节
ShiftRows-将矩阵中的每个横列进行循环唯一
MixColumns-才用线性函数转换来混合每列的四个字节。
最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。[1]