首页 > 编程语言 >[Java的写法]之MD5对字符串签名操作

[Java的写法]之MD5对字符串签名操作

时间:2024-08-07 10:29:09浏览次数:11  
标签:return String static import Java 写法 public hash MD5

对字符串签名后,1:长字符串变为32位字符:aacfbe08d042fddd8ee778b148efc923
2 : 只要长字符串内容不变,签名后得到的32位字符不变。适合用来做ID等。
private String genKeyId(String keyStr) {
return Md5Utils.getStringMD5(keyStr);
}

Md5Utils 类如下:
`

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.lang3.StringUtils;

public class Md5Utils {
protected static char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
protected static MessageDigest messagedigest = null;

public Md5Utils() {      }
static {
    try {
        messagedigest = MessageDigest.getInstance("MD5");
    } catch (NoSuchAlgorithmException var1) {
        var1.printStackTrace();
    }

}

public static String getFileMD5String(File file) throws IOException {
    InputStream fis = new FileInputStream(file);
    byte[] buffer = new byte[1024];
    boolean var3 = false;

    int numRead;
    while((numRead = fis.read(buffer)) > 0) {
        messagedigest.update(buffer, 0, numRead);
    }

    fis.close();
    return bufferToHex(messagedigest.digest());
}

public static String getStringMD5(String str) {
    if (StringUtils.isEmpty(str)) {
        return "";
    } else {
        byte[] buffer = str.getBytes();
        messagedigest.update(buffer);
        return bufferToHex(messagedigest.digest());
    }
}

public static String bufferToHex(byte[] bytes) {
    return bufferToHex(bytes, 0, bytes.length);
}

private static String bufferToHex(byte[] bytes, int m, int n) {
    StringBuffer stringbuffer = new StringBuffer(2 * n);
    int k = m + n;

    for(int l = m; l < k; ++l) {
        appendHexPair(bytes[l], stringbuffer);
    }

    return stringbuffer.toString();
}

private static void appendHexPair(byte bt, StringBuffer stringbuffer) {
    char c0 = hexDigits[(bt & 240) >> 4];
    char c1 = hexDigits[bt & 15];
    stringbuffer.append(c0);
    stringbuffer.append(c1);
}

private static final String toHex(byte[] hash) {
    if (hash == null) {
        return null;
    } else {
        StringBuffer buf = new StringBuffer(hash.length * 2);

        for(int i = 0; i < hash.length; ++i) {
            if ((hash[i] & 255) < 16) {
                buf.append("0");
            }

            buf.append(Long.toString((long)(hash[i] & 255), 16));
        }

        return buf.toString();
    }
}

public static String hash(String s) {
    try {
        return new String(toHex(getStringMD5(s).getBytes("UTF-8")).getBytes("UTF-8"), "UTF-8");
    } catch (Exception var2) {
        return s;
    }
}

public static void main(String[] args) {
    System.out.println(getStringMD5("admin123"));
    System.out.println(hash("123456"));
}

}
`

标签:return,String,static,import,Java,写法,public,hash,MD5
From: https://www.cnblogs.com/bugege/p/18346527

相关文章

  • 计算机毕业设计必看必学!! 87229 基于ssm珠宝店信息管理系统,原创定制程序, java、PHP
    摘要近年来,随着移动互联网的快速发展,电子商务越来越受到网民们的欢迎,电子商务对国家经济的发展也起着越来越重要的作用。简单的流程、便捷可靠的支付方式、快捷畅通的物流快递、安全的信息保护都使得电子商务越来越赢得网民们的青睐。现今,大量的计算机技术应用于商业领域,......
  • 计算机毕业设计必看必学! ! 79197 基于ssm+mysql的学生心理健康在线咨询平台,原创定制
    摘要:在社会快速发展的影响下,教育业继续发展,大大增加了学生心理健康在线咨询平台的数量、多样性、质量等等的要求,使学生心理健康在线咨询平台的管理和运营比过去十年更加困难。依照这一现实为基础,设计一个快捷而又方便的学生心理健康在线咨询平台是一项十分重要并且有价值的事......
  • 图片增加文本水印(右下角)--Java代码实现
    一.效果展示水印前                                               水印后        二.代码实现 /***在给定的图片上添加文本水印。**@paramsourceImgPath源图片路径*......
  • [JAVA的写法]之List的stream()操作
    List里的遍历pmDesignFiles=pmDesignFiles.stream().map((m)->{m.setLocalPath(“234234”);returnm;}).collect(Collectors.toList());List分组Map<String,List>engMap=proEngList.stream().collect(Collectors.groupingBy(PjDemandBundle::getEngId));Li......
  • JAVA基础:String的常用方法
    目录前言string的常用方法前言上一篇我们学习了string字符串的基本用法,以及string字符串的内部机制,而string也是一个类,他的内部也有很多已经给我们封装好的,方便我们操作字符串的方法,我们是不可能将内部的方法全部记住的,我们只要知道方法是怎么使用的有什么样的效果就行,......
  • Java中对数组的学习
    数组的概念目录数组的概念声明数组变量创建数组处理数组数组作为函数的参数数组作为函数的返回值数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。Java语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变......
  • JavaDS —— 红黑树
    前言还是一样,这里的红黑树重点讲述插入代码的实现,如果对红黑树的删除感兴趣,可以去翻阅其他资料。在数据结构专栏中已经对AVL树的旋转调整做了分析和讲解,这里红黑树也会使用到旋转调整的代码,就不讲述旋转代码的实现,大家如果对旋转不熟悉,可以打开这个文章JavaDS——AVL......
  • 24-08-04 JavaSE java集合详解
    24-08-04JavaSE集合详解文章目录24-08-04JavaSE集合详解理解集合java集合的体系框架Collection类Collection接口的常用方法集合的遍历iterator迭代器增强for循环List类List类的常用方法List的三种遍历方法List的排序ArrayList类ArrayList类的注意事项Arraylist的......
  • Java泛型中的PECS 原则
    在Java泛型中,使用extends和super关键字来定义通配符的上界和下界,主要是为了保证类型安全,并且能够灵活地处理不同类型的集合。具体来说,使用extends和super的原因可以通过理解PECS(ProducerExtends,ConsumerSuper)原则来解释。PECS原则ProducerExtends:如果......
  • Day19--Java多线程编程入门学习
    1.什么是多线程?多线程是一种并发编程技术,它允许程序同时执行多个线程。线程是程序执行的基本单位,一个程序至少有一个线程,即主线程。通过使用多线程,可以在一个程序中同时处理多个任务,提高程序的效率和响应能力。2.为什么要使用多线程?提升性能:在多核处理器上,多线程可以将......