微信小程序获取用户信息后的解密操作

叁歲伎倆 2022-04-23 12:28 356阅读 0赞

会对下面的结果进行操作

  1. https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

java解密操作

  1. import javax.crypto.BadPaddingException;
  2. import javax.crypto.Cipher;
  3. import javax.crypto.IllegalBlockSizeException;
  4. import javax.crypto.NoSuchPaddingException;
  5. import javax.crypto.spec.IvParameterSpec;
  6. import javax.crypto.spec.SecretKeySpec;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import org.apache.commons.codec.binary.Base64;
  10. /**
  11. * 获取信息
  12. */
  13. public JSONObject getUserInfo(String encryptedData,String sessionkey,String iv){
  14. // 被加密的数据
  15. byte[] dataByte = Base64.decodeBase64(encryptedData);
  16. // 加密秘钥
  17. byte[] keyByte = Base64.decodeBase64(sessionkey);
  18. // 偏移量
  19. byte[] ivByte = Base64.decodeBase64(iv);
  20. try {
  21. // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
  22. int base = 16;
  23. if (keyByte.length % base != 0) {
  24. int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
  25. byte[] temp = new byte[groups * base];
  26. Arrays.fill(temp, (byte) 0);
  27. System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
  28. keyByte = temp;
  29. }
  30. // 初始化
  31. Security.addProvider(new BouncyCastleProvider());
  32. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
  33. SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
  34. AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
  35. parameters.init(new IvParameterSpec(ivByte));
  36. cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
  37. byte[] resultByte = cipher.doFinal(dataByte);
  38. if (null != resultByte && resultByte.length > 0) {
  39. String result = new String(resultByte, "UTF-8");
  40. return JSONObject.parseObject(result);
  41. }
  42. } catch (NoSuchAlgorithmException e) {
  43. e.printStackTrace();
  44. } catch (NoSuchPaddingException e) {
  45. e.printStackTrace();
  46. } catch (InvalidParameterSpecException e) {
  47. e.printStackTrace();
  48. } catch (IllegalBlockSizeException e) {
  49. e.printStackTrace();
  50. } catch (BadPaddingException e) {
  51. e.printStackTrace();
  52. } catch (UnsupportedEncodingException e) {
  53. e.printStackTrace();
  54. } catch (InvalidKeyException e) {
  55. e.printStackTrace();
  56. } catch (InvalidAlgorithmParameterException e) {
  57. e.printStackTrace();
  58. } catch (NoSuchProviderException e) {
  59. e.printStackTrace();
  60. }
  61. return null;
  62. }

C#获取用户信息代码

  1. /// <summary>
  2. /// AES解密
  3. /// </summary>
  4. /// <param name="inputdata">输入的数据encryptedData</param>
  5. /// <param name="AesKey">key</param>
  6. /// <param name="AesIV">向量128</param>
  7. /// <returns name="result">解密后的字符串</returns>
  8. public string AESDecrypt(string inputdata, String AesKey, String AesIV)
  9. {
  10. try
  11. {
  12. AesIV = AesIV.Replace(" ", "+");
  13. AesKey = AesKey.Replace(" ", "+");
  14. inputdata = inputdata.Replace(" ", "+");
  15. byte[] encryptedData = Convert.FromBase64String(inputdata);
  16. RijndaelManaged rijndaelCipher = new RijndaelManaged();
  17. rijndaelCipher.Key = Convert.FromBase64String(AesKey); // Encoding.UTF8.GetBytes(AesKey);
  18. rijndaelCipher.IV = Convert.FromBase64String(AesIV);// Encoding.UTF8.GetBytes(AesIV);
  19. rijndaelCipher.Mode = CipherMode.CBC;
  20. rijndaelCipher.Padding = PaddingMode.PKCS7;
  21. ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
  22. byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
  23. string result = Encoding.UTF8.GetString(plainText);
  24. return result;
  25. }
  26. catch (Exception)
  27. {
  28. return null;
  29. }
  30. }

发表评论

表情:
评论列表 (有 0 条评论,356人围观)

还没有评论,来说两句吧...

相关阅读