猫和路由器一体-c 委托

2023年4月3日发(作者:开机不自检)
微信⼩程序⽤户数据的签名验证和加解密
1有问题的加我QQ(1051521493)
⾸先是签名验证:
在⽹上搜索⼀个sha算法,放到⾃⼰的项⽬中,我的是放到⼀个这个解密⽅法类中了,后⾯会有说到。
//sha1签名认证
publicstaticStringgetSha1(Stringstr){
if(str==null||()==0){
returnnull;
}
charhexDigits[]={‘0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,
‘a’,’b’,’c’,’d’,’e’,’f’};
try{
MessageDigestmdTemp=tance(“SHA1”);
(es(“UTF-8”));
byte[]md=();
intj=;
charbuf[]=newchar[j*2];
intk=0;
for(inti=0;i
bytebyte0=md[i];
buf[k++]=hexDigits[byte0>>>4&0xf];
buf[k++]=hexDigits[byte0&0xf];
}
returnnewString(buf);
}catch(Exceptione){
//TODO:handleexception
returnnull;
}
}
验证签名:⾸先接收到signaturerawDatasession_key,调⽤这个上⾯的⽅法就⾏了signature1和signature⽐较,签名认证完成。
Stringsignature=ameter(“signature”);
StringrawData=ameter(“rawData”);
Stringsession_key=ameter(“session_key”);
Stringsha1=rawData+session_key;
Stringsignature1=1(sha1);
//进⾏签名认证
if((signature1)){
n("签名认证成功");
}
下⾯是解密:
调⽤⼀个类直接复制类名为AESUtil
需要注意的是:
CastleProvider;
放到项⽬中会报红:需要下载jar在lib加⼊了⼀个castle的jar,⽹上⾃⼰下放进去就⾏了。
CastleProvider;
dingException;
;
lBlockSizeException;
PaddingException;
meterSpec;
KeySpec;
ty.*;
/**
*
Title:AES解密类
*
Description:在lib加⼊了⼀个castle的jar
*@authorshaoyangzhang
*@data2017年3⽉15⽇
*/
publicclassAESUtil{
publicstaticfinalAESUtilinstance=newAESUtil();
publicstaticbooleaninitialized=false;
/**
*AES解密
*@paramcontent密⽂
*@return
*@throwsInvalidAlgorithmParameterException
*@throwsNoSuchProviderException
*/
publicbyte[]decrypt(byte[]content,byte[]keyByte,byte[]ivByte)throwsInvalidAlgorithmParameterException{
initialize();
try{
Ciphercipher=tance(“AES/CBC/PKCS7Padding”);
KeysKeySpec=newSecretKeySpec(keyByte,“AES”);
(T_MODE,sKeySpec,generateIV(ivByte));//初始化
byte[]result=l(content);
returnresult;
}catch(NoSuchAlgorithmExceptione){
tackTrace();
}catch(NoSuchPaddingExceptione){
tackTrace();
}catch(InvalidKeyExceptione){
tackTrace();
}catch(IllegalBlockSizeExceptione){
tackTrace();
}catch(BadPaddingExceptione){
tackTrace();
}catch(NoSuchProviderExceptione){
//TODOAuto-generatedcatchblock
tackTrace();
}catch(Exceptione){
//TODOAuto-generatedcatchblock
tackTrace();
}
returnnull;
}
publicstaticvoidinitialize(){
if(initialized)return;
vider(newBouncyCastleProvider());
initialized=true;
}
//⽣成iv
publicstaticAlgorithmParametersgenerateIV(byte[]iv)throwsException{
AlgorithmParametersparams=tance(“AES”);
(newIvParameterSpec(iv));
returnparams;
}
//sha1签名认证
publicstaticStringgetSha1(Stringstr){
if(str==null||()==0){
returnnull;
}
charhexDigits[]={‘0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,
‘a’,’b’,’c’,’d’,’e’,’f’};
try{
MessageDigestmdTemp=tance(“SHA1”);
(es(“UTF-8”));
byte[]md=();
intj=;
charbuf[]=newchar[j*2];
intk=0;
for(inti=0;i
bytebyte0=md[i];
buf[k++]=hexDigits[byte0>>>4&0xf];
buf[k++]=hexDigits[byte0&0xf];
}
returnnewString(buf);
}catch(Exceptione){
//TODO:handleexception
returnnull;
}
}
}
下⾯是对上⾯的类的调⽤:
需要说明的是session_key我们⽬前没有做缓存,我直接传到前台了,存到前台缓存了,等有了缓存redis再放到⾥⾯,直接拿出来,现
在是通过前台得到的。
publicvoiddecodeUserInfo(HttpServletRequestrequest){
StringencryptedData=ameter("encryptedData");
Stringiv=ameter("iv");
StringsessionId=ameter("rd_session");
Stringsignature=ameter("signature");
StringrawData=ameter("rawData");
Stringsession_key=ameter("session_key");
Stringsha1=rawData+session_key;
Stringsignature1=1(sha1);
//进⾏签名认证
if((signature1)){
n("签名认证成功");
}else{
return;
}
try{
byte[]resultByte=t(Base64(encryptedData),Base64(session_key),Base64(i
v));
if(null!=resultByte&&>0){
StringuserInfo=newString(resultByte,"UTF-8");
JSONObjectjson=ject(userInfo);//将字符串{“id”:1}
n(json);
}
}catch(InvalidAlgorithmParameterExceptione){
tackTrace();
}catch(UnsupportedEncodingExceptione){
tackTrace();
}
}
更多推荐
小程序微信认证
发布评论