美文网首页
1. java 微信小程序,解密

1. java 微信小程序,解密

作者: 逗不一样 | 来源:发表于2020-03-29 22:42 被阅读0次

    /**

    * @param sessionKey

    * @param encryptedData

    * @param iv

    * @Description: 获取C端小程序手机号的解析

    */

    public static EncryptedDataOfMobile getEncryptedDataOfMobile(String sessionKey, String encryptedData, String iv) {

    logger.info("getEncryptedData sessionKey[{}], encryptedData[{}], iv[{}]", sessionKey, encryptedData, iv);

    // 被加密的数据

      byte[] dataByte = Base64.decode(encryptedData);

    // 加密秘钥

      byte[] keyByte = Base64.decode(sessionKey);

    // 偏移量

      byte[] ivByte = Base64.decode(iv);

    try {

    // 如果密钥不足16位,那么就补足.  这个if 中的内容很重要

          int base =16;

    if (keyByte.length % base !=0) {

    int groups = keyByte.length / base + (keyByte.length % base !=0 ?1 :0);

    byte[] temp =new byte[groups * base];

    Arrays.fill(temp, (byte)0);

    System.arraycopy(keyByte,0, temp,0, keyByte.length);

    keyByte = temp;

    }

    // 初始化

          Security.addProvider(new BouncyCastleProvider());

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");

    SecretKeySpec spec =new SecretKeySpec(keyByte,"AES");

    AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");

    parameters.init(new IvParameterSpec(ivByte));

    cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化

          byte[] resultByte = cipher.doFinal(dataByte);

    if (null != resultByte && resultByte.length >0) {

    String result =new String(resultByte,"UTF-8");

    logger.info("getEncryptedData result[{}]", result);

    return FasterJsonTool.readValue(result, EncryptedDataOfMobile.class);

    }

    }catch (Exception e) {

    logger.info("getEncryptedDataOfMobile 解密手机号异常", e);

    }

    return null;

    }

    相关文章

      网友评论

          本文标题:1. java 微信小程序,解密

          本文链接:https://www.haomeiwen.com/subject/veppuhtx.html