微信开发请求工具类WxUtils

Import org.apache.commons.codec.binary.Base64;

 

Import javax.crypto.Cipher;

Import javax.crypto.KeyGenerator;

Import javax.crypto.spec.IvParameterSpec;

Import javax.crypto.spec.SecretKeySpec;

Import java.security.AlgorithmParameters;

Import java.security.Key;

Import java.security.Security;

 

/**

*@authorclunt

*<p>微信手机号解密</p>

**/

 

public   class WxUtils{

 

 

/**

**微信数据解密<br/>

**对称解密使用的算法为AES-128-CBC,数据采用PKCS#7填充<br/>

**对称解密的目标密文:encrypted=Base64_Decode(encryptData)<br/>

**对称解密秘钥:key=Base64_Decode(session_key),aeskey是16字节<br/>

**对称解密算法初始向量:iv=Base64_Decode(iv),同样是16字节<br/>

**

**@paramencrypted目标密文

**@paramsession_key会话ID

**@paramiv加密算法的初始向量

*

*/

public static String     wxDecrypt(Stringencrypted,Stringsession_key,Stringiv){

          Stringresult=null;

          byte[]encrypted64=Base64.decodeBase64(encrypted);

          byte[]key64=Base64.decodeBase64(session_key);

          byte[]iv64=Base64.decodeBase64(iv);

         try{

                  i nit();

               result=newString(decrypt(encrypted64,key64,generateIV(iv64)));

         }catch(Exceptione){

              e.printStackTrace();

        }

                return  result;

 }

 

/**

**初始化密钥

*

*/

 

            public static  void  init()throws  Exception{

                   Security.addProvider(neworg.bouncycastle.jce.provider.BouncyCastleProvider());

                    KeyGenerator.getInstance(WechatAccountConfig.AES).init(128);

             }

 

/**

**生成iv

*

*/

public  static   AlgorithmParameters    generateIV(byte[]iv)throws   Exception{

                  //iv为一个16字节的数组,这里采用和iOS端一样的构造方法,数据全为0

             AlgorithmParametersparams=AlgorithmParameters.getInstance(WechatAccountConfig.AES);

             params.init(new  IvParameterSpec(iv));

            return   params;

}

 

/**

**生成解密

*

*/

        public   static  byte[]decrypt(byte[]encryptedData,byte[]keyBytes,AlgorithmParameters iv)throws   Exception{

                       Keykey=newSecretKeySpec(keyBytes,WechatAccountConfig.AES);

                       Ciphercipher=Cipher.getInstance(WechatAccountConfig.AES_CBC_PADDING);

                        //设置为解密模式

                       cipher.init(Cipher.DECRYPT_MODE,key,iv);

                       return    cipher.doFinal(encryptedData);

          }

 

  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值