Java MD5算法

JAVA MD5算法 

MD5即Message-Digest Algorithm 5(信息-摘要算法5),是一种用于产生数字签名的单项散列算法。

MD5算法的作用是让大容量信息在用数字签名软件签私人密匙前被”压缩”成一种保密的格式,将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个128bit的大整数.

即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。

Java 中,java.security.MessageDigest 中已经定义了 MD5 的计算,我们只需要简单地调用即可得到 MD5 的128 位整数,然后将此 128 位计 16 个字节转换成 16 进制表示即可。

[java] view plaincopy

  1. package edu.bjtu;
  2. /**
  3. * MD5的算法在RFC1321 中定义
  4. * 在RFC 1321中,给出了Test suite用来检验你的实现是否正确:
  5. * MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
  6. * MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
  7. * MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
  8. * MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
  9. * MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
  10. *
  11. * @author yilee
  12. *
  13. * 传入:一个字节数组
  14. * 传出:字节数组的 MD5 结果字符串
  15. */
  16. public class MD5 {
  17. public static String getMD5(byte[] source) {
  18. String s = null;
  19. char hexDigits[] = { // 用来将字节转换成 16 进制表示的字符
  20. ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘};
  21. try {
  22. java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
  23. md.update(source);
  24. byte tmp[] = md.digest();          // MD5 的计算结果是一个 128 位的长整数,
  25. // 用字节表示就是 16 个字节
  26. char str[] = new char[16 * 2];   // 每个字节用 16 进制表示的话,使用两个字符,
  27. // 所以表示成 16 进制需要 32 个字符
  28. int k = 0;                                // 表示转换结果中对应的字符位置
  29. for (int i = 0; i < 16; i++) {    // 从第一个字节开始,对 MD5 的每一个字节
  30. // 转换成 16 进制字符的转换
  31. byte byte0 = tmp[i];  // 取第 i 个字节
  32. str[k++] = hexDigits[byte0 >>> 4 & 0xf];  // 取字节中高 4 位的数字转换,
  33. // >>> 为逻辑右移,将符号位一起右移
  34. str[k++] = hexDigits[byte0 & 0xf];   // 取字节中低 4 位的数字转换
  35. }
  36. s = new String(str);  // 换后的结果转换为字符串
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }
  40. return s;
  41. }
  42. }

测试如下:

[java] view plaincopy

  1. import edu.bjtu.*;
  2. public class Test {
  3. // 计算 "a" 的 MD5 代码,应该为:0cc175b9c0f1b6a831c399e269772661
  4. public static void main(String xu[]) {
  5. System.out.println(MD5.getMD5("a".getBytes()));
  6. }
  7. }
时间: 2024-10-12 04:18:21

Java MD5算法的相关文章

JAVA md5算法代码

public class MD5 { /** * 签名字符串 * @param text 需要签名的字符串 * @param key 密钥 * @param input_charset 编码格式 * @return 签名结果 */ public static String sign(String text, String key, String input_charset) { text = text + key; return DigestUtils.md5Hex(getContentByte

密码技术应用设计实践-安全信息传输系统(SITS)(用Java实现DES、RSA、MD5算法)

本系统包括五个模块,注册模块.登录模块.RSA算法模块.DES算法模块.MD5算法模块.这五个模块每一个实现不同的功能.注册模块实现将用户名和密码写入文件中,登录模块则负责将其读入并且判断其是否正确.RSA算法模块实现生成密钥对.加密和解密功能.DES算法模块实现加密和解密功能.MD5算法模块是实现生成摘要的功能. (1).首先为注册界面: package test; import javax.swing.*; import java.awt.*;   //导入必要的包 import java.

与java一致的md5算法(C++)

工作中需要对网络传输的二进制配置文件进行md5运算生成校验码,以避免在网络传输中,文件的内容发生损坏和篡改.过程中大致是这样的: 1.服务端c++,请求端java: 2.请求端POST请求服务器上的某个文件,要求传输到请求端: 3.向服务端请求文件时,服务端需要对要传输的文件内容作md5加密,生成32字符校验码,将校验码作为http头信息字段传输到请求端: 4.请求端对传过来的文件也进行MD5加密,生成的校验码和服务器传来的做比较,相同即保证了数据的完整性和合法性,并对内容进行处理,否则,丢弃.

Java 实现Md5算法

package other; import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/* * MD5 算法*/public class MD5 {        // 全局数组    private final static String[] strDigits = { "0", "1", "2", "3", "

Java利用MessageDigest提供的MD5算法加密字符串或文件

MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了解这些的话,可以去百度百科:MD5.SHA1.消息摘要算法. Java已经实现了MD5.SHA1算法.利用java.security.MessageDigest类就可以获取字符串和文件的MD5以及SHA1结果. 1.字符串的MD5(下面的代码有详细注释) public static String s

md5算法的java实现

http://blog.csdn.net/forgotaboutgirl/article/details/7258109 md5算法的java实现,码迷,mamicode.com

MD5算法实现

MD5算法的简要叙述为: MD5以512位分组来处理输入的信息(512位分组?每次处理都取出512位数据?), 每一分组又被划分为16个32位子分组(16乘32刚好是512), 经过一些列的处理后(怎么处理的?),算法的输出由四个32位分组组成, 将这4个32位分组级联后将生成一个128位的散列值(那么这个散列值是最后的加密结果咯). 在MD5算法中,首先需要对信息进行填充,使其位长度对512求余的结果等于448. 因此,信息的位长度(Bits Length)将被扩展至N*512+448,即N*

常用MD5算法代码

常用的MD5算法代码日期: 2014年8月4日作者: 铁锚 MD5,全称为 Message Digest Algorithm 5(消息摘要算法第五版).详情请参考 维基百科:MD5 MD5加密后是一个字节数组, 但我们一般是取其十六进制的字符串表示法,当然,十六进制数字符串是区分大小写,在 mysql数据库,Java,和JavaScript语言中,一般是使用小写的字符串来表示, 而在 Oracle数据库官方提供的包中,返回的是大写字符串,这算是一个坑,如果你想要执行多次 md5,可能需要转换为小

2015-6-8 用javascript+ Java+md5解决http协议下,用户登录明文传输密码问题

不应该说是前段时间了,就最近吧,发现公司有一个系统用的还是Http协议,当时就想了,现在都用https协议,有证书的那安全大很多啊 ,还用http不会连加密都没有吧,找了一番,果然如此,别说是传输加密了,就连后台保存到数据库的密码都没有加密,本着闲的蛋疼的想法(主要是公司大部分是业务,感觉想跳啊),于是一个毁(无)天(聊)灭(之)地(极)的计划就这样诞生了,咳咳... 好了不废话,下面说下简单的思路: 用户登录页面,获取到用户密码,用MD5加密,然后进行传输,服务器端获取的是一个加密过的密码.然