浅谈Java中的MD5技术
2013-11-03 21:01 小华.J 阅读(557) 评论(0) 收藏 举报浅谈MD5的及Java实现
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。
MD5的应用
一致性验证
MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:
MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461
这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:
大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的“数字指纹”,如果任何人对文件做了任何改动,其MD5值也就是对应的“数字指纹”都会发生变化。
我们常常在某些软件下载站点的某软件信息中看到其MD5值,它的作用就在于我们可以在下载该软件后,对下载回来的文件用专门的软件(如Windows MD5 Check等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。利用MD5算法来进行文件校验的方案被大量应用到软件下载站、论坛数据库、系统文件安全等方面。
数字证书
安全访问认证
private static String getMD5(String inStr) {
MessageDigest md5 = null;
String outStr = null;
try {
md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(inStr.getBytes());
outStr = byte2hex(digest); } catch (NoSuchAlgorithmException e) {
e.printStackTrace(); }
return outStr; }
private static String byte2hex(byte[] digest) {
StringBuffer hs = new StringBuffer();
String stmp = ""; for(int n = 0 ; n < digest.length ; n++)
{
stmp = Integer.toHexString(digest[n] & 0XFF);
if(stmp.length() == 1){
hs.append("0" + stmp); }else{
hs.append(stmp); }
}
return hs.toString().toUpperCase();
}
浙公网安备 33010602011771号