public class MD5_Test {
public static String md5_1(String oldStr) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
try {
byte[] oldBytes = oldStr.getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(oldBytes);
byte[] newBytes = md.digest();
char newStr[] = new char[32];
for (int i = 0; i < 16; i++) {
byte tmp = newBytes[i];
newStr[2 * i] = hexDigits[tmp >>> 4 & 0xf];
newStr[2 * i + 1] = hexDigits[tmp & 0xf];
}
return new String(newStr);
} catch (Exception e) {
return null;
}
} public static String md5_2(String oldStr) {
try {
MessageDigest digest = MessageDigest.getInstance("md5");
byte[] bs = digest.digest(oldStr.getBytes());
String hexString = "";
for (byte b : bs) {
int temp = b & 255;
if (temp < 16 && temp >= 0) {
hexString = hexString + "0" + Integer.toHexString(temp);
} else {
hexString = hexString + Integer.toHexString(temp);
}
}
return hexString;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
} public static String md5_3(String plainText) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
return buf.toString();
// System.out.println("result: " + buf.toString());//32位的加密
// System.out.println("result: " + buf.toString().substring(8,24));//16位的加密
} public static String EncoderByMd5(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;
} public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
System.out.println(md5_1("1"));
System.out.println(md5_2("1"));
System.out.println(md5_2("1"));
}
}

输出结果:

Java中md5摘要算法的几种方法的更多相关文章

  1. Java中创建数组的几种方法

    Java中创建数组的几种方法 public static void main(String[] args) { //创建数组的第一种方法 int[] arr=new int[6]; int intVa ...

  2. 谈谈java中遍历Map的几种方法

    java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下具体的用法以及各自的优缺点 先初始化一个map public ...

  3. Java中遍历map的四种方法 - 转载

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  4. Java 中 List 分片的 5 种方法!

    前些天在实现 MyBatis 批量插入时遇到了一个问题,当批量插入的数据量比较大时,会导致程序执行报错,如下图所示: 原因是 MySQL 只能执行一定长度的 SQL 语句,但当插入的数据量较多时,会生 ...

  5. JAVA中创建线程的三种方法及比较

    JAVA中创建线程的方式有三种,各有优缺点,具体如下: 一.继承Thread类来创建线程 1.创建一个任务类,继承Thread线程类,因为Thread类已经实现了Runnable接口,然后重写run( ...

  6. java中遍历map的几种方法介绍

          喜欢用Java写程序的朋友都知道,我们常用的一种数据结构map中存储的是键值对,我们一般存储的方式是: map.put(key, value); 而提取相应键的值用的方法是: map.ge ...

  7. 干货 | Java中获取类名的3种方法!

    获取类名的方法 Java 中获取类名的方式主要有以下三种. getName() 返回的是虚拟机里面的class的类名表现形式. getCanonicalName() 返回的是更容易理解的类名表示. g ...

  8. Java中终止线程的三种方法

    终止线程一般建议采用的方法是让线程自行结束,进入Dead(死亡)状态,就是执行完run()方法.即如果想要停止一个线程的执行,就要提供某种方式让线程能够自动结束run()方法的执行.比如设置一个标志来 ...

  9. Java中List排序的3种方法

    在某些特殊的场景下,我们需要在 Java 程序中对 List 集合进行排序操作.比如从第三方接口中获取所有用户的列表,但列表默认是以用户编号从小到大进行排序的,而我们的系统需要按照用户的年龄从大到小进 ...

随机推荐

  1. 初识python: 继承实例 - 学校、老师、学生

    对学校.老师.学生做一个分类,并抽象成类.并实现各自的一些功能.代码如下: 父类1:学校 # 学校 class School(object): def __init__(self,name,addr) ...

  2. 详解nohup /dev/null 2>&1 含义的使用

    https://www.jb51.net/article/169837.htm 这篇文章主要介绍了详解nohup /dev/null 2>&1 含义的使用,文中通过示例代码介绍的非常详细 ...

  3. jsp使用${}语法,对应的spring后台使用Model

    实现的前提,一定要在jsp文件顶部加上 <%@page isELIgnored="false" %> 如上图${aa}与${bb},是直接使用Model的key值对应的 ...

  4. 整理spring + mysql + redis + 测试 的配置格式 和源码

    经过多次整理,最终以这样的文件格式配置 目前配好的基本模板: 1 <?xml version="1.0" encoding="UTF-8"?> 2 ...

  5. vscode中关闭python默认自动提示

    vscode中python的默认自动代码提示工具是Jedi,我现在用的是kite.默认情况下连个自动补全工具会同时工作,提示窗口会重复出现相同的代码.以下操作可以关闭Jedi.

  6. VM搭建Hadoop环境静态IP未起作用

    原文 https://www.toutiao.com/i6481452558941438478/ 问题描述 1.环境工具 VMware_workstation_full_12.5.2 CentOS-7 ...

  7. markdown mermaid流程图

    流程图 所有流程图都由节点.几何图像.箭头或线条组成. mermaid代码定义了这些节点和边的制作和交互方式.可以有不同的箭头类型.多向箭头以及与子图的连接. 节点 节点 flowchart LR i ...

  8. 如何获取Repeater行号(索引)、记录总数?

    Repeater控件想必搞ASP.NET开发的人,基本上都到了用的炉火纯青的地步了.今个又吃了懒的亏,翻了好几个项目的代码都没找到如何获取Repeater记录总数的代码来,又Google了半天难得从老 ...

  9. 桥接模式(Bridge模式)

    桥接模式的定义与特点 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化.它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度.通过上面的讲解,我们能很好 ...

  10. Flink State Rescale性能优化

    背景 今天我们来聊一聊flink中状态rescale的性能优化.我们知道flink是一个支持带状态计算的引擎,其中的状态分为了operator state和 keyed state两类.简而言之ope ...