md5加密实现方法有很多种,也导致很难选择。大概分析下自己了解的一些用法。
1.sun官方
sun提供了MessageDigest和BASE64Encoder可以用指定算法加密。
例:
public static final String EncoderPwdByMd5(String str) throws NoSuchAlgorithmException,UnsupportedEncodingException
{
// 确定计算方法
MessageDigest md5 = MessageDigest.getInstance("MD5");
BASE64Encoder base64en = new BASE64Encoder();
// 加密后的字符串,注意一定要自己指定编码,否则会取系统默认。不同系统会不一致。
String newstr = base64en.encode(md5.digest(str.getBytes("utf-8")));
return newstr;
}
分析:
1)BASE64Encoder是不建议使用的,引入有时候也会报错:
Access restriction: The type BASE64Encoder is not accessible due to restriction on required library C:\Program files\java\jdk1.6\jre\lib\rt.jar
oracle官方有文档说明(Why Developers Should Not Write Programs That Call 'sun' Packages),sun.*下面的类不建议使用:
http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html
但也有两种规避办法。
方法一:
1. Open project properties.
2. Select Java Build Path node.
3. Select Libraries tab.
4. Remove JRE System Library.
5. Add Library JRE System Library.
方法二:
Go to Window-->Preferences-->Java-->Compiler-->Error/Warnings.
Select Deprecated and Restricted API. Change it to warning.
Change forbidden and Discouraged Reference and change it to warning. (or as your need.)
另外:
使用MessageDigest不使用BASE64Encoder也可以实现md5加密,但要自己实现md5算法,
比较麻烦。可以参考:
http://blog.csdn.net/xiao__gui/article/details/8148203http://blog.csdn.net/xiao__gui/article/details/8148203
http://wenku.baidu.com/link?url=pgf96g_dt2r2vEE88RG7jqMaW3PCSmxL_3sEBwbNb4EzLalQnb-hUsAB1bnqotbAlCDTT60WvFdS0hn9QTeSJAUtahDgpWE9Z_S-yM8Y6-a
2.sun官方和第三方结合
也可以使用MessageDigest 加第三方apache commons-codec的支持:
final MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));
final byte[] resultByte = messageDigest.digest();
String result = Hex.encodeHexString(resultByte);
注意:
以上两种方法都使用了MessageDigest,
需要特别强调:MessageDigest线程不安全。 The MessageDigest classes are NOT thread safe. If they're going to be used by different threads, just create a new one, instead of trying to reuse them.
3.使用第三方工具包
很多第三方工具都提供了md5,sha等加密方法。apache,google等都提供了工具包。
3.1 apache的commons-codec
1)maven配置(现在的版本有很多,选择自己需要的):
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.6</version>
</dependency>
2)引入包后:
public static String encodeMD5Hex(String data)
{
return DigestUtils.md5Hex(data);
}
并且该方法是线程安全的。
3.2 google的guava
Apache Common是一个时间比较久的框架了,Google针对基础框架退出了自己的类库,并且开源出来(http://code.google.com/p/guava-libraries/),名为“Guava”。它在部分功能上其实是ApacheCommon的一个子集,但在性能上做了很多优化,并且针对并发和大规模系统开发做了很多新的策略(如CopyOnWrite、Immutable、SkipList)等。虽然有些类和java.util.concurrent有些重叠,但是在一般环境下都可以替代。
md5示例:
Hasher hasher = Hashing.md5().newHasher();
hasher.putString("my string");
byte[] md5 = hasher.hash().asBytes();
既方便又安全。
此外,其他组织或公司也有对外提供的工具类,额。。还不清楚。
综上,从使用方便和安全性,性能等考虑,优先选择还是第三方的工具包。
分享到:
相关推荐
.Net c# 几种加密方法固定key 随机key 对称加密 MD5等
Excel的字段MD5加密,一种是VBA函数,另一种为宏函数。建议使用VBA函数。会相对简单。具体的函数使用组合键Alt+F11即可查看,
清除浮动的几种方法.md
ASP.NET加密教程(MD5和SHA1加密几种方法) 很简单的一个文本文件,不要分简单的说明
这是我个人收集的几种MD5加密方式,分享一下
尽管MD4算法在安全上有个这么大的漏洞,但它对在其后才被开发出来的好几种信息安全加密算法的出现却有着不可忽视的引导作用。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。 一年以后,即1991年,...
尽管MD4算法在安全上有个这么大漏洞但它对在其后才被开发出来好几种信息安全加密算法出现却有着不 可忽视引导作用除了MD5以外其中比较有名还有SHA-1、RIPE-MD以及HAVAL等 年以后即1991年Rivest开发出技术上更为...
C#加密解密源码 有不可逆加密和可逆加密,可逆加密,MD5不可逆加密等几种方法
MD5的设计者,同时也是国际著名的公钥加密算法标准RSA的第一设计者R.Rivest在邮件中写道:“这些结果无疑给人非常深刻的印象,她应当得到我最热烈的祝贺,当然,我并不希望看到MD5就这样倒下,但人必须尊崇真理。...
明文加密的几种方法,包括MD5加密算法,SHA-256加密算法,Base64加密算法
尽管MD4算法在安全上有个这么大的漏洞,但它对在其后才被开发出来的好几种信息安全加密算法的出现却有着不可忽视的引导作用。除了MD5以外,其中比较有名的还有SHA-1、RIPE-MD以及HAVAL等。 一年以后,即1991年...
与大家分享几种常用的php加密函数的用法,作者:陈和群。包括了MD5 base64 crypt Sha1等。一些用法说明如下: var_dump(md5('zxcasd',$raw_output=true)); //raw_output为可选参数如果被设置为true那么MD5报文摘要...
上次曾经传过一个易宝、支付宝、财付通、云网等多用MD5加密程序。 易宝是采用hmac的MD5加密,提供的ASP版函数不支持中文,使用dll注册那个兼容又不太好。 上次我发布的加密程序也不支持中文,且支付宝那个加密函数是...
右键属性文件校验插件可同时生成十几种校验码(MD5 CRC32 SHA1) MD5的安全性受到挑战,需要配合SHA1等多种校验方式进行文件校验,防止被篡改和恶意捆绑
常见的几种加密方法和实现, SHA1、RSA、AES、 DES、MD5的具体实现
C#的MD5加密的几种方法,想学习加密技术的同学不要错过。
这是C#的几种加密和解密的方法,里面包含Base64的加密和解密,MD5的加密,SHA1的加密和解密,文件夹的加密和解密
加密算法:我这有几种加解密算法,暂时拿来一起用用!
全称:MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。md5加密算法是不可逆的,所以解密一般...
主要介绍了Android 中 MD5 的几种生成方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧