天天看点

java加密类支持sha256,md5,HmacSha1,base64

package secrect;

import org.apache.commons.codec.digest.DigestUtils;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;


/**
 * dependency : org.apache.commons.codec==1.1.4 and org.apache.commons.lang3==3.9
 */
public class javaSecretUtil {
    static final String Hmac_algorithm = "HmacSHA1";
    static String utf8="utf-8";
    public static void main(String[] args) {
        //md5test("hello","str");
//        hexSha256Msg("hello,你好");
//        sha256hex("hello,你好");
        EncryptHmacSha1("hello","key", javaSecretUtil.Hmac_algorithm);   // s0zqxFFv8joUPmHXnQ+npPvl8mY=
    }


    static String  md5test(String text,String returnType)  {
        /** md5() return byte[],md5hex()   return String hex */
        String result=null;
        if (returnType.equals("str")){
             result = DigestUtils.md5Hex(text);
             System.out.println(result);  // 5d41402abc4b2a76b9719d911017c592
        }else if(returnType.equals("byteArray")){
            byte[] res = DigestUtils.md5(text);
            System.out.println(byteToHex(res));// 5d41402abc4b2a76b9719d911017c592
        }
       //new String((byte[]) res)
        return result;
}
    public static String byteToHex(byte[] bytes){
        /**byte[] 转hex 16 进制 */
        String strHex = "";
        StringBuilder sb = new StringBuilder("");
        for (int n = 0; n < bytes.length; n++) {
            strHex = Integer.toHexString(bytes[n] & 0xFF);
            sb.append((strHex.length() == 1) ? "0" + strHex : strHex); // 每个字节由两个字符表示,位数不够,高位补0
        }
        return sb.toString().trim();
    }



    public static String md5(String Text) {
        /** java.util 自带类*/
        //定义一个字节数组
        byte[] secretBytes = null;
        try {
            // 生成一个MD5加密计算摘要
            MessageDigest md = MessageDigest.getInstance("MD5");
            //对字符串进行加密
            md.update(Text.getBytes());
            //获得加密后的数据
            secretBytes = md.digest();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("没有md5这个算法!");
        }
        //将加密后的数据转换为16进制数字
        String md5code = new BigInteger(1, secretBytes).toString(16);
        // 如果生成数字未满32位,需要前面补0
        for (int i = 0; i < 32 - md5code.length(); i++) {
            md5code = "0" + md5code;
        }
        System.out.println(md5code);  //5d41402abc4b2a76b9719d911017c592
        return md5code;
    }

    static  String jdkBase64(String text) {
        /** jdk java.util 自带类 */
        String res= null;
        try {
            Base64.Encoder encoder = Base64.getEncoder();
            //Base64.Decoder decoder = Base64.getDecoder();
            //System.out.println(new String(decoder.decode(encodedStringText), "UTF-8"));
            byte[] data = text.getBytes("UTF-8");
            res = encoder.encodeToString(data); // byte[] is medium change type
        }catch (UnsupportedEncodingException e){
            e.printStackTrace();
        }
        System.out.println(res);
        return res ;
    }

    static String hexSha256Msg(String text) {
        /**  hex sha256 64 bit length ,java.util + byteToHex() */
        String str=null;
        byte[] data = text.getBytes();
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            md.update(data);
            byte[] bytes = md.digest();
            str = byteToHex(bytes);
        }catch (NoSuchAlgorithmException e){
            e.printStackTrace();
        }
        System.out.println(str);
        return str ;
    }

    static String sha256hex(String text){
        /** codec sha256 */
        String str =null;
        try{
            str = DigestUtils.sha256Hex(text);

        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(str);
        return str ;
    }

    static  String EncryptHmacSha1(String encryptText,String key,String ALGORITHM){
        String res=null;
        try {
            SecretKey secretKey = new SecretKeySpec(key.getBytes(javaSecretUtil.utf8),ALGORITHM);
            Mac mac = Mac.getInstance(ALGORITHM);
            mac.init(secretKey);
            // deal text
            byte[] text = encryptText.getBytes(javaSecretUtil.utf8);
            byte[] bytes = mac.doFinal(text);
            res = Base64.getEncoder().encodeToString(bytes);
            System.out.println(res);
        }catch (Exception e){
            e.printStackTrace();
        }
        return res ;
    }

}