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 慢。
/*
@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 ;
}
/**
@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 ;
}
}
2025 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123