JAVA中MD5散列表加密与Spring中MD5 SHA加密比较
2014-11-26 17:37
323 查看
l MD5(Message Digest Algorithm 5):是RSA数据安全公司开发的一种单向散列算法。
l SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值;
SHA-1
在1993年,安全散列算法(SHA)由美国国家标准和技术协会(NIST)提出,并作为联邦信息处理标准(FIPS PUB 180)公布;1995年又发布了一个修订版FIPS PUB 180-1,通常称之为SHA-1。SHA-1是基于MD4算法的,并且它的设计在很大程度上是模仿MD4的。现在已成为公认的最安全的散列算法之一,并被广泛使用。
MD5 与SHA-1 的比较
因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
l 对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
l 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
l 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
JAVA内置java.security.MessageDigest实现:
Spring中MD5是由org.springframework.security.authentication.encoding.Md5PasswordEncoder
而SHA是由org.springframework.security.authentication.encoding.ShaPasswordEncoder:
sha("")= da39a3ee5e6b4b0d3255bfef95601890afd80709
md5("")=d41d8cd98f00b204e9800998ecf8427e
l SHA(Secure Hash Algorithm):可以对任意长度的数据运算生成一个160位的数值;
SHA-1
在1993年,安全散列算法(SHA)由美国国家标准和技术协会(NIST)提出,并作为联邦信息处理标准(FIPS PUB 180)公布;1995年又发布了一个修订版FIPS PUB 180-1,通常称之为SHA-1。SHA-1是基于MD4算法的,并且它的设计在很大程度上是模仿MD4的。现在已成为公认的最安全的散列算法之一,并被广泛使用。
MD5 与SHA-1 的比较
因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:
l 对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
l 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
l 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
JAVA内置java.security.MessageDigest实现:
package com.redhamr.util; import java.io.*; import java.security.MessageDigest; public class HashCrypt { /*** * MD5加码 生成32位md5码 */ public static String string2MD5(String inStr){ MessageDigest md5 = null; try{ md5 = MessageDigest.getInstance("MD5"); }catch (Exception e){ System.out.println(e.toString()); e.printStackTrace(); return ""; } char[] charArray = inStr.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) byteArray[i] = (byte) charArray[i]; byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++){ int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) hexValue.append("0"); hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); } /** * 加密解密算法 执行一次加密,两次解密 */ public static String convertMD5(String inStr){ char[] a = inStr.toCharArray(); for (int i = 0; i < a.length; i++){ a[i] = (char) (a[i] ^ 't'); } String s = new String(a); return s; } // 测试主函数 public static void main(String args[]) { String s = new String("lcx123"); System.out.println("原始:" + s); System.out.println("MD5后:" + string2MD5(s)); System.out.println("解密的:" + convertMD5(convertMD5(s))); } }
Spring中MD5是由org.springframework.security.authentication.encoding.Md5PasswordEncoder
而SHA是由org.springframework.security.authentication.encoding.ShaPasswordEncoder:
package com.esoft.core.util; import org.springframework.security.authentication.encoding.Md5PasswordEncoder; import org.springframework.security.authentication.encoding.PasswordEncoder; import org.springframework.security.authentication.encoding.ShaPasswordEncoder; public class HashCrypt { public static String SHA = "SHA"; public static String MD5 = "MD5"; private final static PasswordEncoder shaPasswordEncoder = new ShaPasswordEncoder(); private final static PasswordEncoder md5PasswordEncoder = new Md5PasswordEncoder(); public static String getDigestHash(String str) { return getDigestHash(str, "SHA"); } public static String getDigestHash(String str, String hashType) { if (str == null) return null; return getDigestHash(str, hashType,null); } public static String getDigestHash(String str, String hashType,Object salt ) { if(hashType == null){ hashType = SHA ; } if(hashType.equals(MD5)){ return md5PasswordEncoder.encodePassword(str, salt); } return shaPasswordEncoder.encodePassword(str, salt); } public static void main(String[] args) { System.out.println( getDigestHash("jhsx128710104") ); } }
空字符串:
sha("")= da39a3ee5e6b4b0d3255bfef95601890afd80709md5("")=d41d8cd98f00b204e9800998ecf8427e
相关文章推荐
- JAVA单向加密(MD5,SHA,MAC)
- JAVA加密技术-----MD5 与SHA 加密
- Java单向(非可逆)加密--MD5、SHA和HMAC
- Java代码的 MD5 / SHA-1 等Hash算法的加密
- Java 自带的加密类MessageDigest类(加密MD5和SHA)
- BASE64,MD5,SHA,HMAC加密與解密算法(java)
- Java 自带的加密类MessageDigest类(加密MD5和SHA)
- Java 自带的加密类MessageDigest类(加密MD5和SHA)
- BASE64,MD5,SHA,HMAC加密與解密算法(java)
- JAVA md5、SHA加密类
- Java/Android GZip,BZip2,Zip 压缩封装 和 MD5,RSA,SHA,Desede 加密封装
- java加密 base64,md5,sha
- 使用java.security.MessageDigest类来实现MD5、SHA加密
- java中MD5和SHA加密
- 在Java中使用MessageDigest实现MD5,SHA-1等加密
- java md5 sha 加密 随机数
- java MessageDigest加密 md5 sha
- BASE64,MD5,SHA,HMAC加密与解密算法(java)
- Java 自带的加密类MessageDigest类(加密MD5和SHA)
- java 实现各种加密(MD5 ,SHA-1,SHA-256)