欢迎光临,了解微信小程序开发,就上易用通!

Java实现小程序用户信息解密

发布:2018-02-10 12:05浏览: 来源:网络 作者:cola


Node,php,Phthon,C++地址:https://www.wxapp-union.com/forum.php?mod=viewthread&tid=1415
以及C#的代码:https://www.wxapp-union.com/forum.php?mod=viewthread&tid=1398
ruby:https://www.wxapp-union.com/forum.php?mod=viewthread&tid=1541
go:https://www.wxapp-union.com/forum.php?mod=viewthread&tid=539
 
加上这个,已经比较齐全了,值得参考,另外大家可以搜索一下“登录”这个关键词,查看一些文章关于登录的,用于辅助;
关键代码:

public String decrypt(String encryptedData, String sessionKey, String iv, String encodingFormat) throws Exception {

   try {

      Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");

      BASE64Decoder base64Decoder = new BASE64Decoder();

      byte[] _encryptedData = base64Decoder.decodeBuffer(encryptedData);

      byte[] _sessionKey = base64Decoder.decodeBuffer(sessionKey);

      byte[] _iv = base64Decoder.decodeBuffer(iv);

      SecretKeySpec secretKeySpec = new SecretKeySpec(_sessionKey, "AES");

      IvParameterSpec ivParameterSpec = new IvParameterSpec(_iv);

      cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);

      byte[] original = cipher.doFinal(_encryptedData);

      byte[] bytes = WxPKCS7Encoder.decode(original);

      String originalString = new String(bytes, encodingFormat);      return originalString;

   } catch (Exception ex) {

      return null;

   }

}

依赖类 WxPKCS7Encoder.javaclass WxPKCS7Encoder {

   static Charset CHARSET = Charset.forName("utf-8");

   static int BLOCK_SIZE = 32;



   /**

    * 获得对明文进行补位填充的字节.

    * 

    * @param count 需要进行填充补位操作的明文字节个数

    * @return 补齐用的字节数组

    */

   static byte[] encode(int count) {

      // 计算需要填充的位数

      int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE);

      if (amountToPad == 0) {

         amountToPad = BLOCK_SIZE;

      }

      // 获得补位所用的字符

      char padChr = chr(amountToPad);

      String tmp = new String();

      for (int index = 0; index < amountToPad; index++) {

         tmp += padChr;

      }

      return tmp.getBytes(CHARSET);

   }



   /**

    * 删除解密后明文的补位字符

    * 

    * @param decrypted 解密后的明文

    * @return 删除补位字符后的明文

    */

   static byte[] decode(byte[] decrypted) {

      int pad = (int) decrypted[decrypted.length - 1];

      if (pad < 1 || pad > 32) {

         pad = 0;

      }

      return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad);

   }



   /**

    * 将数字转化成ASCII码对应的字符,用于对明文进行补码

    * 

    * @param a 需要转化的数字

    * @return 转化得到的字符

    */

   static char chr(int a) {

      byte target = (byte) (a & 0xFF);

      return (char) target;

   }



}


jdk版本1.8





免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。