这个是需要拿到解密的密钥 微信登录拿到的code String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appId + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code"; String getResult = Https.sendGet(url, "", false); WXKey bean = new Gson().fromJson(getResult, WXKey.class); String decrypt = new String(AESWX.decrypt(encryptedData, bean.getSession_key(), iv), "UTF-8");
decrypt 最终要的答案
下面是AESWX:
public class AESWX { // 算法名称 final static String KEY_ALGORITHM = "AES"; // 加解密算法/模式/填充方式 final static String algorithmStr = "AES/CBC/PKCS7Padding"; // private static Key key; private static Cipher cipher; public static void init(byte[] keyBytes) { // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要 int base = 16; if (keyBytes.length % base != 0) { int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0); byte[] temp = new byte[groups * base]; Arrays.fill(temp, (byte) 0); System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length); keyBytes = temp; } // 初始化 Security.addProvider(new BouncyCastleProvider()); // 转化成JAVA的密钥格式 key = new SecretKeySpec(keyBytes, KEY_ALGORITHM); try { // 初始化cipher cipher = Cipher.getInstance(algorithmStr); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 解密方法 * * @param encryptedData * 要解密的字符串 * @param keyBytes * 解密密钥 * @return */ public static byte[] decrypt(String encryptedDataStr, String keyBytesStr, String ivStr) { byte[] encryptedText = null; byte[] encryptedData = null; byte[] sessionkey = null; byte[] iv = null; try { sessionkey = Base64.decodeBase64(keyBytesStr); encryptedData = Base64.decodeBase64(encryptedDataStr); iv = Base64.decodeBase64(ivStr); init(sessionkey); cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(iv)); encryptedText = cipher.doFinal(encryptedData); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return encryptedText; }