hutool国密加密解密demo&SHA-1加密

136 阅读1分钟

hutool加解密包demo


import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SmUtil;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public class Test123 {

    /**
     * 加密
     * @param key  国密4 key
     * @param str  待加密字符串
     * @return
     */
    public static String encrypt(String key,  String str){
        String encrypt_str = SmUtil.sm4(StrUtil.utf8Bytes(key)).encryptHex(str);
        System.out.println("加密后的数据:" + encrypt_str);
        return encrypt_str;
    }


    /**
     * 解密
     * @param key 国密4 key
     * @param str 待解密字符串
     */
    public static String decrypt(String key,  String str){
        String decrypt_str = SmUtil.sm4(StrUtil.utf8Bytes(key)).decryptStr(str);
        System.out.println("解密后的数据:" + decrypt_str);
        return decrypt_str;
    }

    /**
     * 动态生成16位不重复随机数
     *
     * @return
     */
    public synchronized static String generate16() {
        StringBuffer stringBuffer = new StringBuffer();
        String date = getDateyyyyMMddNone();
        String seconds = getDateHHmmssNone();
        stringBuffer.append(date).append(generate2()).append(seconds);
        return stringBuffer.toString();
    }

    private static String getDateyyyyMMddNone() {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
        String fd = sdf.format(date);
        return fd;
    }

    private static String getDateHHmmssNone() {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("HHmmss");
        String fd = sdf.format(date);
        return fd;
    }
    /**
     * 随机创建2位ID
     *
     * @return String 2位随机数ID
     */
    private synchronized static String generate2() {
        Random rad = new Random();
        String result = rad.nextInt(100) + "";
        if (result.length() == 1) {
            result = "0" + result;
        }
        return result;
    }


    /**
     * 动态生成16位随机数(包含大小写字母和数字)
     *
     * @return
     */
        public static String generate16_2 (){
            int len = 16;
            int f =0;
            char[] pwd = new char[len];
            for(int i = 0 ; i<len;i++){
                //随机生成0,1,2三个数中的一个f,作为判断条件
                f = (int)(Math.random()*3);
                if(f==0){
                    //生成0-9之间的随机数字
                    pwd[i] = (char)('0'+Math.random()*10);
                }else if(f==1){
                    //随机生成一个小写字母
                    pwd[i] = (char)('a'+ Math.random()*26);
                }else
                    //随机生成一个大写字母
                    pwd[i] =(char)('A'+Math.random()*26);

            }
            return new String(pwd);
        }


    public static void main(String[] args) {
        //国密4 key必须是16位
        String key = "1234567890123456";
        key = generate16_2();
        System.out.println("加密key:" + key);
        //待加密字符串
        String str = "123";
        String encrypt_str =  encrypt(key,  str);
        String decrypt_str =  decrypt(key,  encrypt_str);
    }
} 

SHA-1加密



public class SHA1Utils {
    public SHA1Utils() {
    }

    public static String encrypt(String str) {
        String result = "";

        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-1");
            digest.update(str.getBytes("UTF-8"));
            byte[] messageDigest = digest.digest();
            StringBuffer hexString = new StringBuffer();

            for(int i = 0; i < messageDigest.length; ++i) {
                String shaHex = Integer.toHexString(messageDigest[i] & 255);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }

                hexString.append(shaHex);
            }

            result = hexString.toString();
            return result;
        } catch (NoSuchAlgorithmException var7) {
            var7.printStackTrace();
        } catch (UnsupportedEncodingException var8) {
            var8.printStackTrace();
        }

        return result;
    }
}