<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      微信小程序數據解密(Java)

      pom 依賴

      非必須,hutool 是為了使用 AES 工具類,bcprov 是為了使用 PKCS7Padding,都可以自己實現,這里為了方便。

      <dependency>
          <groupId>cn.hutool</groupId>
          <artifactId>hutool-all</artifactId>
          <version>${hutool-all.version}</version>
      </dependency>
      <dependency><!--AES/CBC/PKCS7Padding-->
          <groupId>org.bouncycastle</groupId>
          <artifactId>bcprov-jdk15to18</artifactId>
          <version>${bcprov-jdk15to18.version}</version>
      </dependency>

       

      工具類

      import cn.hutool.json.JSONUtil;
      
      import javax.crypto.*;
      import javax.crypto.spec.IvParameterSpec;
      import javax.crypto.spec.SecretKeySpec;
      import java.nio.charset.StandardCharsets;
      import java.security.*;
      import java.security.spec.InvalidParameterSpecException;
      
      public class WeChatUtil {
          static {
              Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); // 初始化密鑰
          }
      
          /**
           * 解密數據
           */
          public static String decrypt(String appId, String sessionKey, String encryptedData, String iv) throws
                  InvalidAlgorithmParameterException, NoSuchPaddingException, IllegalBlockSizeException,
                  NoSuchAlgorithmException, InvalidParameterSpecException, BadPaddingException, InvalidKeyException {
              // AES aes = new AES("CBC", "PKCS7Padding", Base64.decode(sessionKey), Base64.decode(iv));
              // byte[] resultByte = aes.decrypt(Base64.decode(encryptedData));
              byte[] resultByte = wxDecrypt(encryptedData, sessionKey, iv);
              String result = new String(resultByte, StandardCharsets.UTF_8);
              // 是否與當前 appid 相同
              if (!appId.equals(JSONUtil.parseObj(result).getJSONObject("watermark").getStr("appid"))) {
                  result = "";
              }
              return result;
          }
      
          public static final String KEY_NAME = "AES"; // 算法名
          // 加解密算法/模式/填充方式,ECB 模式只用密鑰即可對數據進行加密解密,CBC 模式需要添加一個 iv
          public static final String CIPHER_ALGORITHM = "AES/CBC/PKCS7Padding";
      
          /**
           * 接口如果涉及敏感數據(如 wx.getUserInfo 當中的 openId 和 unionId),接口的明文內容將不包含這些敏感數據。
           * 開發者如需要獲取敏感數據,需要對接口返回的加密數據(encryptedData) 進行對稱解密。 解密算法如下:
           * * 對稱解密使用的算法為 AES-128-CBC,數據采用 PKCS#7 填充。
           * * 對稱解密的目標密文為 Base64_Decode(encryptedData)。
           * * 對稱解密秘鑰 aeskey = Base64_Decode(session_key), aeskey 是16字節。
           * * 對稱解密算法初始向量 為 Base64_Decode(iv),其中 iv 由數據接口返回。
           *
           * @param encrypted  目標密文
           * @param sessionKey 會話ID
           * @param iv         加密算法的初始向量
           */
          public static byte[] wxDecrypt(String encrypted, String sessionKey, String iv) throws NoSuchAlgorithmException,
                  InvalidParameterSpecException, NoSuchPaddingException, BadPaddingException, InvalidKeyException,
                  IllegalBlockSizeException, InvalidAlgorithmParameterException {
              KeyGenerator.getInstance(KEY_NAME).init(128);
      
              // 生成 iv
              // iv 為一個 16 字節的數組,這里采用和 iOS 端一樣的構造方法,數據全為 0
              // Arrays.fill(iv, (byte) 0x00);
              AlgorithmParameters ivj = AlgorithmParameters.getInstance(KEY_NAME);
              ivj.init(new IvParameterSpec(java.util.Base64.getDecoder().decode(iv)));
      
              // 生成解密
              Key key = new SecretKeySpec(java.util.Base64.getDecoder().decode(sessionKey), KEY_NAME);
              Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
              cipher.init(Cipher.DECRYPT_MODE, key, ivj); // 設置為解密模式
              return cipher.doFinal(java.util.Base64.getDecoder().decode(encrypted));
          }
      }

      測試

      public static void main(String[] args) {
          String appId = "wx4f4bc4dec97d474b";
          String encryptedData = "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJl" +
                  "AC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW" +
                  "1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs" +
                  "8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2" +
                  "SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COw" +
                  "fneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew==";
          String sessionKey = "tiihtNczf5v6AKRyjwEUhQ==";
          String iv = "r7BXXKkLb8qrSNn05n0qiA==";
          System.out.println(WeChatUtil.decrypt(appId, sessionKey, encryptedData, iv));
      }

       


      https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密數據解密算法

      http://tool.chacuo.net/cryptaes

      https://www.hutool.cn/docs/#/crypto/對稱加密-SymmetricCrypto

      posted @ 2021-06-21 17:24  江湖小小白  閱讀(1322)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 午夜不卡欧美AAAAAA在线观看| 久久欧洲精品成av人片| 亚洲精品国产精品不乱码| 黄页网址大全免费观看| 日韩有码中文字幕国产| 蜜臀av入口一区二区三区| 真实国产精品视频400部| 亚洲春色在线视频| 亚洲中文字幕乱码电影| 综合欧美视频一区二区三区| 国产精品中文字幕日韩| 亚洲国产另类久久久精品网站| 女人腿张开让男人桶爽 | 精品国产精品午夜福利| 99久久精品费精品国产一区二| 香港经典a毛片免费观看播放| 在线观看中文字幕国产码| FC2免费人成在线视频| 中文字幕乱码一区二区免费| 国产精品成| 国产免费久久精品99reswag| 国产乱码精品一区二三区| 成年在线观看免费人视频 | 精品无码国产日韩制服丝袜| 亚洲乱熟女一区二区三区| 狠狠色噜噜狠狠狠狠7777米奇| 亚洲人成色77777| 热久在线免费观看视频| 综合激情网一区二区三区| 国产亚洲精品在av| 人妻日韩人妻中文字幕| 汉源县| 99久久精品国产一区二区暴力| 亚洲国产日韩伦中文字幕| 国产亚洲精品成人aa片新蒲金 | 亚洲爆乳WWW无码专区| 亚洲欧美日韩国产精品专区| 国产成人高清亚洲一区二区| 欧美日韩精品一区二区三区在线 | 精品国偷自产在线视频99| 精品国产制服丝袜高跟|