D E S 算 法 原 理 完 整 版

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MD5加密算法与SHA加密算法

2、MD5加密

2.1?概述

Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC

1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992).

MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT

Laboratory for Computer Science和RSA Data Security Inc的Ronald

L. Rivest开发出来,经MD2、MD3和MD4发展而来。

MD5用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。

2.2?算法原理

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

2.3 Java中的MD5实现

MD5加密算法的Java实现如下所示:

[java]?view

plain?copy

package?amigo.endecrypt;?

import?java.security.MessageDigest;?

*采用MD5加密?

*@authorXingxing,Xie

*@datetime2014-5-31

public?class?MD5Util?{?

*MD5加密?生成32位md5码?

*@param待加密字符串?

*@return返回32位md5码?

publicstaticStringmd5Encode(StringinStr)throwsExcepti on?{?

MessageDigestmd5=null;

md5=MessageDigest.getInstance("MD5");

}catch(Exceptione){

System.out.println(e.toString());

e.printStackTrace();

return"";

byte[]byteArray=inStr.getBytes("UTF-8");

byte[]md5Bytes=md5.digest(byteArray);

StringBufferhexValue=newStringBuffer();

for(inti=0;imd5Bytes.length;i++){

intval=((int)md5Bytes[i])0xff;

if(val16){

hexValue.append("0");

hexValue.append(Integer.toHexString(val));

returnhexValue.toString();

*测试主函数?

*@paramargs

*@throwsException

publicstaticvoidmain(Stringargs[])throwsException{ Stringstr=newString("amigoxiexiexingxing");

System.out.println("原始:"?+?str);?

System.out.println("MD5后:"?+?md5Encode(str));?

测试结果:

原始:amigoxiexiexingxing

MD5后:e9ac094091b96b84cca48098bc21b1d6

3、SHA加密

3.1?概述

SHA是一种数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。

安全散列算法SHA(Secure Hash

Algorithm,SHA)是美国国家标准技术研究所发布的国家标准FIPS PUB 180,最新的标准已经于2008年更新到FIPS PUB 180-3。其中规定了SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512这几种单向散列算法。SHA-1,SHA-224和SHA-256适用于长度不超过2^64二进制位的消息。

相关文档
最新文档