不朽
不朽
发布于 2024-07-16 / 4 阅读
0
0

接口对接常见加/解密方法

接口对接常见加/解密方法

1.MD5签名加签方法

public class PackingEncryptByMD5 {
    public static String getMD5Encrypt(String coutent) {
        String ret = DigestUtils.md5DigestAsHex(coutent.getBytes());
        return ret;
    }

    public static String getSign(String appsecret, Map<String, String> param) {
        if (param != null && param.keySet().size() > 0) {
            List<String> keyList = new ArrayList<String>(param.keySet());
            Collections.sort(keyList);
            String cont = "";
            for (int i = 0; i < keyList.size(); i++) {
                cont = cont + keyList.get(i) + "=" + param.get(keyList.get(i));
                if (i < keyList.size() - 1) {
                    cont = cont + "&";
                }
            }
            cont = cont + appsecret;
            System.out.println("cont:" + cont);
            return getMD5Encrypt(cont);
        }
        return null;
    }

}

2.Base64密文AES/CBC/PKCS5Padding方式解密

public class PackingDecryptUtil {

    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = ALGORITHM + "/CBC/PKCS5Padding";
    private static final String UTF_8 = "UTF-8";
    /**
     * 解密 Base64 编码的字符串
     *
     * @param base64EncodedData Base64 编码的加密数据
     * @param keyStr               密钥,必须是 16, 24 或 32 字节长
     * @return 解密后的字符串
     * @throws Exception 如果解密过程中出现错误
     */
    public static String decryptBase64ToText(String base64EncodedData, String keyStr) throws Exception {
        byte[] key = keyStr.getBytes(); //
        // 将 Base64 编码的数据转换回字节数组
        byte[] encryptedData = Base64.getDecoder().decode(base64EncodedData);
        // 创建 SecretKeySpec 对象
        SecretKeySpec secretKey = new SecretKeySpec(key, ALGORITHM);
        // 初始化 Cipher 对象
        Cipher cipher = Cipher.getInstance(TRANSFORMATION);
        cipher.init(Cipher.DECRYPT_MODE, secretKey,new IvParameterSpec(key));
        // 执行解密操作
        byte[] decryptedData = cipher.doFinal(encryptedData);
        // 将解密后的字节数组转换为字符串
        return new String(decryptedData, UTF_8);
    }

}

评论