MessageDigest的使用

5,604 阅读1分钟

java.security.MessageDigest

官方文档

功能:

  • 单向文本加密

  • 不论输入的文本多长,输出固定长度的hash值

使用过程

  1. 创建实例
  2. 调用update()方法开始计算,
  3. 调用digest()方法获取加密内容

Tips:

  • 调用update()方法后,任何时间点都可以调用reset()方法来重置MessgeDigest对象的状态为初始化状态
  • 调用digest()方法后,会将MessgeDigest对象的状态重置为初始化状态

代码

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Sha256Demo {
    public static void main(String[] args) {
        System.out.println("SHA256(1)="+getSha256Txt("1"));
        System.out.println("SHA256(2)="+getSha256Txt("2"));
        System.out.println("SHA256(3)="+getSha256Txt("!@#$%^&*()_+1234567890abcdefghijklmnopqrstuvwxyz================================================================================================="));
    }

    private static String getSha256Txt(String str){
        MessageDigest messageDigest;

        String encodeTxt="";
        try {
            messageDigest= MessageDigest.getInstance("SHA-256");
            messageDigest.update(str.getBytes(StandardCharsets.UTF_8));

            encodeTxt=byteToHex(messageDigest.digest());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }

        return encodeTxt;
    }

    private static String byteToHex(byte[] bytes){
        StringBuilder builder = new StringBuilder();

        String temp;

        for (byte b:bytes){
            temp=Integer.toHexString(b&0xFF);

            //得到一位的进行补0操作
            if(temp.length()==1)
                builder.append(0);

            builder.append(temp);
        }

        return builder.toString();
    }
}