微信开发请求工具类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);

          }

 

  }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章