`
足至迹留
  • 浏览: 495859 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

MD5 几种方法的选择

阅读更多
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();

既方便又安全。
此外,其他组织或公司也有对外提供的工具类,额。。还不清楚。

综上,从使用方便和安全性,性能等考虑,优先选择还是第三方的工具包。
0
0
分享到:
评论

相关推荐

    Excel的MD5加密的2种实现方式

    在Excel中,我们可以利用两种方法对字段进行MD5加密:VBA(Visual Basic for Applications)函数和宏。以下将详细介绍这两种方法。 首先,我们来看VBA函数的实现。VBA是Excel内置的编程环境,允许用户自定义函数和...

    MD5加密方法

    下面介绍几种增强型MD5加密技术: 1. **多次迭代MD5**: - 实现方式:通过对原始数据进行多次MD5运算,增加计算复杂度。 - 示例代码: ```php function md5_1_1($data, $times = 32) { for ($i = 0; $i $times...

    md5加密算法的两种方法

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,主要用来生成一个固定长度的数字摘要,这个摘要能够代表原始数据。在IT行业中,MD5常常用于数据校验,比如验证文件的完整性,或者在存储密码时,将密码...

    .Net几种加密方法(固定key 随机key 对称加密 MD5等)

    本文将详细介绍.NET中常见的几种加密方法,包括固定Key、随机Key、对称加密以及MD5加密。这些技术在保护敏感信息、验证数据完整性和防止数据篡改方面起着至关重要的作用。 1. 固定Key加密: 固定Key加密是指使用一...

    pb调用md5加密的方法

    在PowerBuilder中,如果你需要调用MD5加密的方法,通常会涉及到以下几个知识点: 1. **MD5算法**:MD5是一种不可逆的加密算法,它将数据(字符串或二进制)转换为32位的十六进制数字。尽管存在碰撞风险,即不同的...

    md5sum-code_md5sum_md5sum工具_

    MD5(Message-Digest Algorithm 5)是一种广泛应用于数据完整性检验的哈希函数,它能将任意长度的数据转化为固定长度的摘要信息。这个摘要信息在理论上是不可逆的,也就是说,无法从MD5值反推出原始数据,因此常用来...

    PB编程MD5方法及使用方法

    MD5的使用方法在PB9环境下主要包括以下几个步骤: 1. **导入库**:PB9中实现MD5功能可能需要导入第三方库,如pbdigest,这个库提供了对MD5算法的支持。首先,你需要将这个库引入到你的项目中,可以在PB的Library ...

    VB6 MD5算法_vb6md5_VB6MD5验签_vb6_VB6MD5算法_

    MD5(Message-Digest Algorithm 5)则是一种广泛使用的哈希函数,它可以将任意长度的输入转化为固定长度的输出,通常是一个128位的二进制数,常以32位的十六进制字符串表示。在VB6中实现MD5算法,主要用于数据的校验...

    Delphi实现MD5加密

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入数据转换为固定长度的输出,通常是一个128位的二进制数,以32位十六进制的形式表示。在编程领域,MD5常用于数据校验、密码存储...

    md5加密jar包

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,主要目的是为了产生一个固定长度的摘要,用于表示原始数据。在IT行业中,MD5主要用于数据校验、密码存储和文件完整性验证等方面。MD5加密jar包是将MD5...

    MD5官方规范

    尽管MD5在过去曾被认为是安全的,但随着时间的发展,研究人员已经发现了多种方法来生成具有相同MD5摘要的不同消息。因此,MD5不再适用于需要高度安全性的应用场景,如数字签名和密码存储。对于这些场景,推荐使用更...

    jquery实现MD5加密

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的数据映射为固定长度的摘要信息,通常用于数据校验、密码存储等场景。在前端开发中,有时候为了增强数据安全性,可能需要在客户端对...

    MD5Verify MD5VERIFY

    MD5Verify的使用方法通常包括以下几个步骤: 1. **下载MD5Verify工具**:用户需要从可信赖的来源下载MD5Verify的执行文件,如MD5Verify.exe。 2. **运行程序**:找到下载的MD5Verify.exe,双击运行,或者通过命令行...

    mac md5 检测工具

    在Mac上进行MD5检测,通常有以下几种方式: 1. **内置命令行工具**:在终端(Terminal)中,用户可以使用`md5`命令来计算文件的MD5值。例如,输入`md5 /path/to/your/file`,然后按回车,终端会显示该文件的MD5摘要...

    MD5加密算法的JS文件md5-min.js

    在实际使用`md5-min.js`或其他MD5库时,开发者应仔细阅读文档,了解库的具体使用方法和注意事项,以确保正确且安全地应用MD5加密。此外,对于前端开发而言,理解MD5的工作原理和局限性也是至关重要的,这有助于做出...

    MD5 digest 算法

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,由计算机科学家Ronald Rivest在1991年设计。它能够将任意长度的数据转化为一个固定长度的摘要值,通常是一个128位的二进制数,通常用32个十六进制数字...

    MD5验证软件,用于验证下载镜像MD5值

    但在验证文件完整性方面,MD5仍然是一个有效且常见的方法,尤其是在日常的文件下载和传输中。 总的来说,MD5验证软件是保障数据安全、确保文件未被篡改的重要工具。通过使用像"md5效验工具.exe"这样的软件,用户...

    易语言MD5解密

    在易语言环境下,MD5解密通常涉及到以下几个关键知识点: 1. **MD5算法原理**:MD5通过将输入数据进行多次迭代运算,包括异或、位移、加法等操作,最终得到一个固定长度的散列值。由于MD5是单向函数,理论上无法从...

    matlab实现md5算法,md5算法详解,matlab

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,主要应用于数据的完整性校验和密码存储。它的设计者是Ronald Rivest,在1992年提出,能够将任意长度的数据转换为固定长度的128位(16字节)摘要。这个...

    计算MD5值工具,MD5值计算工具

    在实际应用中,计算MD5值有以下几种常见场景: 1. 文件校验:当用户从网络下载大文件后,可以使用MD5值计算工具对比官方提供的MD5值,以确认文件在传输过程中是否完整无误。 2. 数据存储:数据库或其他存储系统在...

Global site tag (gtag.js) - Google Analytics