Explorar el Código

将md5加密改成sha256

xushengqiang hace 6 años
padre
commit
de1d87cd3b

+ 2 - 2
src/main/java/cn/efunbox/audio/controller/DeviceController.java

@@ -8,8 +8,8 @@ import cn.efunbox.audio.entity.Device;
 import cn.efunbox.audio.service.ChannelService;
 import cn.efunbox.audio.service.DeviceService;
 import cn.efunbox.audio.utils.ApiCode;
+import cn.efunbox.audio.utils.Encrypt;
 import cn.efunbox.audio.utils.HttpUtil;
-import cn.efunbox.audio.utils.SecurityUtils;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
@@ -199,7 +199,7 @@ public class DeviceController {
         Map<String,String> param = new HashMap<>();
         param.put("idChannel",idChannel);
         param.put("idDevice",idDevice);
-        String test = SecurityUtils.createMD5Sign(param, signKey);
+        String test = Encrypt.createSHA256Sign(param,signKey);
 
         if (!sign.equalsIgnoreCase(test)) {
             HttpUtil.responseApiCode(request, response, ApiCode.SIGN_FAIL);

+ 182 - 0
src/main/java/cn/efunbox/audio/utils/Encrypt.java

@@ -0,0 +1,182 @@
+package cn.efunbox.audio.utils;
+
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.lang.StringUtils;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.*;
+
+/**
+ * 常見的几种加密方式
+ */
+public class Encrypt {
+
+    public static final String SIGN = "sign";
+
+    public static void main(String[] args) {
+        Map<String,String> param = new HashMap<>();
+        param.put("idChannel","1001");
+        param.put("idDevice","10011");
+
+        String ihOTiTyMLDNNLFuP = createSHA256Sign(param, "IhOTiTyMLDNNLFuP");
+        System.out.println(ihOTiTyMLDNNLFuP);
+	}
+
+
+    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("签名错误");
+        }
+    }
+
+    /**
+     * MD5加密 生成32位md5码
+     */
+    public static String string2MD5(String inStr){
+        MessageDigest md5 = null;
+        try{
+            md5 = MessageDigest.getInstance("MD5");
+        }catch (Exception e){
+            System.out.println(e.toString());
+            e.printStackTrace();
+            return "";
+        }
+        char[] charArray = inStr.toCharArray();
+        byte[] byteArray = new byte[charArray.length];
+ 
+        for (int i = 0; i < charArray.length; i++)
+            byteArray[i] = (byte) charArray[i];
+        byte[] md5Bytes = md5.digest(byteArray);
+        StringBuffer hexValue = new StringBuffer();
+        for (int i = 0; i < md5Bytes.length; i++){
+            int val = ((int) md5Bytes[i]) & 0xff;
+            if (val < 16)
+                hexValue.append("0");
+            hexValue.append(Integer.toHexString(val));
+        }
+        return hexValue.toString().toUpperCase();
+    }
+    /**
+     * SHA1加密 
+     * @param str
+     * @return
+     */
+    public static String string2Sha1(String str){
+        if(str==null||str.length()==0){
+            return null;
+        }
+        char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9',
+                'a','b','c','d','e','f'};
+        try {
+            MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
+            mdTemp.update(str.getBytes("UTF-8"));
+ 
+            byte[] md = mdTemp.digest();
+            int j = md.length;
+            char buf[] = new char[j*2];
+            int k = 0;
+            for (int i = 0; i < j; i++) {
+                byte byte0 = md[i];
+                buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                buf[k++] = hexDigits[byte0 & 0xf];      
+            }
+            return new String(buf);
+        } catch (Exception e) {
+            // TODO: handle exception
+            return null;
+        }
+    }
+ 
+    /**
+     *  利用Apache的工具类实现SHA-256加密
+     *  所需jar包下載 http://pan.baidu.com/s/1nuKxYGh
+     * @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();
+    }
+}