MD5 和SHA-1 是目前使用比较广泛的散列(Hash)函数,也是在消息认证和数字签名中普遍使用的两种加密算法。本文基于AVR 高速嵌入式单片机,实现了MD5和SHA-1 两种加密算法的比较,并对算法进行了汇编语言的优化和改进。根据实验结果,对两种算法的优缺点进行了比较和分析。
由于MD5 与SHA-1均是从MD4 发展而来,它们的结构和强度等特性有很多相似之处,表(1)是对MD5 与SHA-1 的结构比较。SHA-1与MD5 的最大区别在于其摘要比MD5 摘要长 32 比特。对于强行攻击,产生任何一个报文使之摘要等于给定报文摘要的难度:MD5 是2128 数量级的操作,SHA-1 是2160 数量级的操作。产生具有相同摘要的两个报文的难度:MD5是 264 是数量级的操作,SHA-1 是280 数量级的操作。因而,SHA-1 对强行攻击的强度更大。但由于SHA-1 的循环步骤比MD5 多(80:64)且要处理的缓存大(160 比特:128 比特),SHA-1 的运行速度比MD5 慢。
/*
- @param plainText
- 明文
-
@return 32位密文
*/
public String encryption(String plainText ) {
String re_md5 = new String();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update( plainText.getBytes());
byte b [] = md .digest();int i ; StringBuffer buf = new StringBuffer(); for (int offset = 0; offset < b .length ; offset++) { i = b[ offset]; if (i < 0) i += 256; if (i < 16) buf.append( "0"); buf.append(Integer. toHexString(i)); } re_md5 = buf.toString(); } catch (NoSuchAlgorithmException e ) { e.printStackTrace(); } return re_md5 ; } /**
- SHA加密
- @param str
-
@return
*/
public String getSha1(String str ) {
if (str == null || str.length() == 0) {
return null ;
}
char hexDigits [] = { '0' , '1' , '2' , '3' , '4', '5' , '6' , '7' , '8' , '9' ,
'a', 'b', 'c', 'd', 'e', 'f' };try { MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); mdTemp.update( str.getBytes( "UTF-8")); byte[] md = mdTemp .digest(); int j = md .length ; char buf [] = new char[ j * 2]; int k = 0; for (int i = 0; i < j ; i ++) { byte byte0 = md [i ]; buf[ k++] = hexDigits[byte0 >>> 4 & 0xf]; buf[ k++] = hexDigits[byte0 & 0xf]; } return new String(buf ); } catch (Exception e ) { return null ; } }
共同学习,写下你的评论
评论加载中...
作者其他优质文章