123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- package cn.efunbox.audio.utils;
- import com.alibaba.fastjson.JSONObject;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.codec.binary.Hex;
- import org.apache.commons.lang.StringUtils;
- import javax.crypto.Mac;
- import javax.crypto.spec.SecretKeySpec;
- import java.io.UnsupportedEncodingException;
- import java.nio.charset.StandardCharsets;
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.util.*;
- /**
- * 常見的几种加密方式
- */
- @Slf4j
- public class Encrypt {
- public static final String SIGN = "sign";
- public static String createSHA256Sign(Map<String, String> paramMap, String signKey) {
- List<String> sortedKeys = new ArrayList<String>();
- for (Map.Entry<String, String> entry : paramMap.entrySet()) {
- if (SIGN.equals(entry.getKey())) {
- continue;
- }
- sortedKeys.add(entry.getKey());
- }
- if (sortedKeys.size() == 0) {
- // 没有参数
- return "";
- }
- Collections.sort(sortedKeys);
- StringBuffer buff = new StringBuffer("");
- for (String key : sortedKeys) {
- String val = paramMap.get(key);
- if (StringUtils.isBlank(val)) {
- continue;
- }
- buff.append(key).append("=").append(val).append("&");
- }
- buff.append("key=").append(signKey);
- try {
- return Encrypt.String2SHA256(buff.toString());
- } catch (Exception e) {
- throw new RuntimeException("签名错误");
- }
- }
- /**
- * 利用Apache的工具类实现SHA-256加密
- * @param str 加密后的报文
- * @return
- */
- public static String String2SHA256(String str){
- MessageDigest messageDigest;
- String encdeStr = "";
- try {
- messageDigest = MessageDigest.getInstance("SHA-256");
- byte[] hash = messageDigest.digest(str.getBytes("UTF-8"));
- encdeStr = Hex.encodeHexString(hash);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return encdeStr;
- }
- //---------
- /**
- * 利用java原生的摘要实现SHA256加密
- * @param str 加密后的报文
- * @return
- */
- public static String String2SHA256StrJava(String str){
- MessageDigest messageDigest;
- String encodeStr = "";
- try {
- messageDigest = MessageDigest.getInstance("SHA-256");
- messageDigest.update(str.getBytes("UTF-8"));
- encodeStr = byte2Hex(messageDigest.digest());
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return encodeStr;
- }
-
- /**
- * 将byte转为16进制
- * @param bytes
- * @return
- */
- private static String byte2Hex(byte[] bytes){
- StringBuffer stringBuffer = new StringBuffer();
- String temp = null;
- for (int i=0;i<bytes.length;i++){
- temp = Integer.toHexString(bytes[i] & 0xFF);
- if (temp.length()==1){
- //1得到一位的进行补0操作
- stringBuffer.append("0");
- }
- stringBuffer.append(temp);
- }
- return stringBuffer.toString();
- }
- public static String createHMACSHA256(Map<String, String> paramMap, String signKey) {
- List<String> sortedKeys = new ArrayList<>();
- for (Map.Entry<String, String> entry : paramMap.entrySet()) {
- if (SIGN.equals(entry.getKey())) {
- continue;
- }
- sortedKeys.add(entry.getKey());
- }
- if (sortedKeys.size() == 0) {
- // 没有参数
- return "";
- }
- Collections.sort(sortedKeys);
- StringBuffer buff = new StringBuffer("");
- for (String key : sortedKeys) {
- String val = paramMap.get(key);
- if (StringUtils.isBlank(val)) {
- continue;
- }
- buff.append(key).append("=").append(val).append("&");
- }
- buff.deleteCharAt(buff.length() - 1);
- try {
- return HMACSHA256(buff.toString(),signKey);
- } catch (Exception e) {
- throw new RuntimeException("签名错误");
- }
- }
- public static String HMACSHA256(String data, String key) throws Exception {
- Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
- SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256");
- sha256_HMAC.init(secret_key);
- byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8"));
- StringBuilder sb = new StringBuilder();
- for (byte item : array) {
- sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
- }
- return sb.toString().toUpperCase();
- }
- public static void main(String[] args) {
- Map<String,String> param = new HashMap<>();
- param.put("idChannel","1000");
- param.put("idDevice","test");
- param.put("ts",System.currentTimeMillis() / 1000 + "");
- System.out.println(JSONObject.toJSONString(param));
- // String sign = Encrypt.createHMACSHA256(param,"IhOTiTyMLDNNLFuP");
- String sign = Encrypt.createHMACSHA256(param,"AzaSB2RR0boUz1WQ");
- log.info(sign);
- String encode = Base64.getEncoder().encodeToString(sign.getBytes(StandardCharsets.UTF_8));
- log.info(encode);
- String decode = new String(Base64.getDecoder().decode(encode), StandardCharsets.UTF_8);
- log.info(decode);
- }
- }
|