小程序数据签名校验-Java端

Posted 一脸沧桑的刘先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小程序数据签名校验-Java端相关的知识,希望对你有一定的参考价值。

JDK内置的签名算法不包含小程序需要的(对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充),所以需要引用第三方jar。

    compile group: ‘org.bouncycastle‘, name: ‘bcprov-jdk15on‘, version: ‘1.54‘

以下是具体的代码:

  //自行在构造函数中赋值
   String sessionKey;

 /**
     * AES-128-CBC解密
     * 使用PKCS填充
     * @param encryptedData
     * @param iv
     * @return
     * @throws Exception
     */
    public String decryptAesPkcData(String encryptedData, String iv) throws Exception {
        //检查sessionKey的长度
        if (this.sessionKey.length() != 24) {
            throw new AesException(AesException.IllegalAesKey);
        }
        //检查iv的长度
        if (iv.length() != 24) {
            throw new AesException(AesException.IllegalAesKey);
        }
        byte[] aesKey = Base64.decodeBase64(this.sessionKey);
        byte[] aesIV = Base64.decodeBase64(iv);
        byte[] aesCipher = Base64.decodeBase64(encryptedData);
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
        Key sKeySpec = new SecretKeySpec(aesKey, "AES");
        AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
        params.init(new IvParameterSpec(aesIV));
        cipher.init(Cipher.DECRYPT_MODE, sKeySpec, params);
        return new String(cipher.doFinal(aesCipher), "utf-8");
    }

 

以上是关于小程序数据签名校验-Java端的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序加密数据解密算法-Java实现

微信小程序加密数据解密算法 - Java实现

破解“贪吃蛇大作战”的签名信息服务端验证机制

DAPP开发中Web3唤醒MetaMask签名数据+Java校验签名实现去中心化和中心化用户数据的鉴权

Java Bean Validation 最佳实践

Java Bean Validation 最佳实践