Java实现MD5消息摘要算法
作者:transformer_WSZ 发布时间:2023-06-18 06:37:35
标签:java,md5,摘要
首先,必须要强调的一点,MD5不是加密算法,而是消息摘要算法,具有不可逆性。字符串通过MD5处理后会生成128位的二进制串。我们通常会将其转化为16进制串,用于登录密码验证。
加密算法与消息摘要算法区别:
加密算法具有相应地解密算法,通过加密算法对信息进行加密后,采用解密算法能够获取到原始数据。
采用摘要算法得到的数据是不完整的,无法反向获取到原始数据。
下面直接贴代码:
import java.security.MessageDigest;//Java类库已经支持MD5消息摘要
public class MD5{
private MD5(){
System.out.println("采用MD5消息摘要算法");
}
public static String getMD5Code(String message){
String md5Str = null;
try{
MessageDigest md = MessageDigest.getInstance("MD5");
//message.getBytes()方法是得到一个操作系统默认的编码格式的字节数组。不同的操作系统以及不同的编码格式会返回不同长度的byte型数组。
//md.digest()方法获得密文完成哈希计算,产生128位的二进制串,并且8位一组分成16个byte类型的数值。
byte[] md5Bytes = md.digest(message.getBytes());
//将16个数值都转换成两位16进制的数(161->A1,1->01),因此消息摘要完成后,md5Str是长度为32位的字符串
md5Str = BytesToHex(md5Bytes);
}catch(Exception e){
e.printStackTrace();
}
return md5Str;
}
public static String BytesToHex(byte[] bytes){
StringBuffer s = new StringBuffer();
for(int i=0;i<bytes.length;i++){
//如果数值小于16且大于0,如3,将其转换为03
if(bytes[i]>=0 && bytes[i] <= 15)
s.append("0");
//bytes[i] & 0xFF保证了如果bytes[I]是负数,那么结果仍为两位16进制数;
//toHexString()用于将参数以16进制的字符串形式返回,例如toHexString(241)返回值是字符串f1
s.append(Integer.toHexString(bytes[i] & 0xFF);
}
return s.toString();
}
public static void main(String args[]){
System.out.println(getMD5Code("shanghai"));
System.out.println(getMD5Code("beijing"));
System.out.println(getMD5Code("shanghai"));
}
}
来源:http://blog.csdn.net/transformer_wsz/article/details/70835774


猜你喜欢
- 本文实例为大家分享了基于servlet实现统计网页访问次数的具体代码,供大家参考,具体内容如下一、基础知识(1)ServletContext
- Bmp转Jpegpublic static String bmp2Jpeg(String filePath, String outPath)
- 开始研究android开发,搭建开发环境的时候就出了问题……果然是好事多磨~ 安装了jdk,配置环境变量,安装了完整版的adt、创建了hel
- 本文实例为大家分享了javafx tableview鼠标触发更新属性,供大家参考,具体内容如下public class HoverCell
- 有时候我们需要多列表中的数据进行特定的排序,最近项目中用到的是按名称排序,所以简单来说一下:效果图:排序方法:Collections.sor
- # 看题目是不是很绕,这个我也不知道怎么才能更简单的表达了# 先看代码:public class Common {public static
- 多对多表之间关系表models.py文件代码from django.db import models# Create your models
- 一、概述Overview - LINQ to XML | Microsoft 官方文档LINQ to XMLLINQ to XML 是一种启
- 我们主要介绍一下:java中如何通过最简单的方式实现链式创建json对象,解决创建json代码臃肿的问题。1、假设我们要创建一个json对象
- 1. 测试文档、期望达到的目标文档效果用于测试的Word文档如下所示,包含的空白段落影响文章整体布局及美观性:目标文档效果:2. 辅助工具2
- 首先说一下最近自己遇到的一个坑:@Transactionalservice A(){try{insert();serviceB.update
- 前言在看一本关于高性能编程的时候发现 Java8 中关于接口的新特性的介绍,这个特性是真的棒,解决了一个接口中有多个方法,但并不想实现该接口
- 在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked ex
- 在Material Design里,CoordinatorLayout通常用来作为顶层视图,来协调处理各个子View之间的动作,从而实现各种
- 前言在一个高并发系统中对流量的把控是非常重要的,当巨大的流量直接请求到我们的服务器上没多久就可能造成接口不可用,不处理的话甚至会造成整个应用
- 我就废话不多说了,大家还是直接看代码吧~import java.util.concurrent.ExecutorService; impor
- Java中获取整点时间戳在实际的开发过程中,前端给后端传时间的时候,有时候传的是整点数值,比如:timeList=[00,01,02,03,
- java字符串如何进行比较?我们可以根据内容和引用来比较Java中的String。它用于身份验证(通过 equals() 方法)、排序(通过
- 1、WinForm中datagridview增加行号在界面上拖一个控件dataGridView1,在datagridview添加行事件中添加
- C++中的函数模板 对于类的声明来说,也有同样的问题。有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类:cl