zoukankan      html  css  js  c++  java
  • 微信小程序加密数据解密算法 java

    获取用户头像、昵称、手机号等授权信息,需解密

    java 微信小程序加密数据解密算法

     1     /**
     2      * 加密数据解密
     3      *
     4      * @param encryptedData
     5      * @param sessionKey
     6      * @param iv
     7      * @return
     8      */
     9     private String decrypt(String encryptedData, String sessionKey, String iv) {
    10         String result = "";
    11         try {
    12             byte[] resultByte = AES.decrypt(Base64.decodeBase64(encryptedData),
    13                     Base64.decodeBase64(sessionKey),
    14                     Base64.decodeBase64(iv));
    15             if (null != resultByte && resultByte.length > 0) {
    16                 result = new String(resultByte, "UTF-8");
    17             }
    18         } catch (Exception e) {
    19             e.printStackTrace();
    20         }
    21         return result;
    22     }

    AES 解密工具类

     1 import org.bouncycastle.jce.provider.BouncyCastleProvider;
     2 
     3 import javax.crypto.BadPaddingException;
     4 import javax.crypto.Cipher;
     5 import javax.crypto.IllegalBlockSizeException;
     6 import javax.crypto.NoSuchPaddingException;
     7 import javax.crypto.spec.IvParameterSpec;
     8 import javax.crypto.spec.SecretKeySpec;
     9 import java.security.*;
    10 
    11 public class AES {
    12     public static boolean initialized = false;
    13 
    14     /**
    15      * AES解密
    16      *
    17      * @param content
    18      *            密文
    19      * @return
    20      * @throws InvalidAlgorithmParameterException
    21      * @throws NoSuchProviderException
    22      */
    23     public static byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException {
    24         initialize();
    25         try {
    26             Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
    27             Key sKeySpec = new SecretKeySpec(keyByte, "AES");
    28             cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIv(ivByte));// 初始化
    29             byte[] result = cipher.doFinal(content);
    30             return result;
    31         } catch (NoSuchAlgorithmException e) {
    32             e.printStackTrace();
    33         } catch (NoSuchPaddingException e) {
    34             e.printStackTrace();
    35         } catch (InvalidKeyException e) {
    36             e.printStackTrace();
    37         } catch (IllegalBlockSizeException e) {
    38             e.printStackTrace();
    39         } catch (BadPaddingException e) {
    40             e.printStackTrace();
    41         } catch (NoSuchProviderException e) {
    42             // TODO Auto-generated catch block
    43             e.printStackTrace();
    44         } catch (Exception e) {
    45             // TODO Auto-generated catch block
    46             e.printStackTrace();
    47         }
    48         return null;
    49     }
    50 
    51     public static void initialize() {
    52         if (initialized) {
    53             return;
    54         }
    55         Security.addProvider(new BouncyCastleProvider());
    56         initialized = true;
    57     }
    58 
    59     // 生成iv
    60     public static AlgorithmParameters generateIv(byte[] iv) throws Exception {
    61         AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
    62         params.init(new IvParameterSpec(iv));
    63         return params;
    64     }
    65 }
    View Code

    以下情况,有可能导致解密失效:

    1、短时间的多次 wx.login

    2、授权回调里,又再次 wx.login

    也就是,没事不要瞎调用 wx.login

  • 相关阅读:
    HDU 5883 F
    关于codeblock 为什么不能调试
    Codeforces Round #378 (Div. 2) D. Kostya the Sculptor 分组 + 贪心
    51NOD 区间的价值 V2
    NYOJ 42 一笔画问题
    如何对二维字符数组进行排序
    hihoCoder 1383 : The Book List 北京网络赛
    利用IDA学习一个简单的安卓脱壳
    iOS APP可执行文件的组成
    Mac10.11 搭建php开发环境
  • 原文地址:https://www.cnblogs.com/qiujz/p/13207580.html
Copyright © 2011-2022 走看看