- _nosay
关于apicloud加密模块signature踩坑经历
2017-08-18 17:33:30
两个小时的光阴,研究并使用signature模块。
由于上来很顺利的把ios端和服务端的加密通信搞定了,可谓信心满满的去搞android端。但是,安卓端加密以后,服务端死活解不开,发给ios端也是解不开,心中顿时万马奔腾。
赶紧翻了翻apicloud论坛,唉呀,并没有搜索到相关的问题,水贴一却是一大片。没办法,发贴官方求助吧,管理员一个小时后终于回复,说会上报给技术部门解决云云。
毕竟用人家的东西,要怀感恩之心。论坛谢过以后,得找解决办法不是。rsa不行,要不咱换aes吧,换了以后,尼玛,ios也解不开了,彻底玩完。
反正我是不打算用他的模块了,我决定引入外部js自己搞一个好了,去他奶奶的模块,爱谁谁用。来到我们最可爱的github,果然有相应解决方法,链接地址:https://github.com/travist/jsencrypt
我们只需要把bin目录下的jsencrypt.min.js即可,啥也不说了,开始整合。
首先放login.js文件内容
function setLeftTime() {
var second = Math.floor(leftsecond);
$("#verify_code").html(second + "秒后可重发");
$('#verify_code').removeClass('aui-btn-info');
leftsecond--;
if (leftsecond < 1) {
clearInterval(timer);
try {
$("#verify_code").html("获取验证码");
$('#verify_code').attr("onclick", 'sendMobileValidSMSCode()');
$("#mobile").removeAttr("readonly");
} catch (E) {
console.log('error');
}
return;
}
}
function sendMobileValidSMSCode() {
var mobile = $('#mobile').val();
var mbTest = /^(13|14|15|17|18)[0-9]{9}$/;
if (mbTest.test(mobile)) {
leftsecond = 60;
timer = setInterval(setLeftTime, 1000);
$("#mobile").attr("readonly", true);
var postStr = {"phone":mobile};
var encodeStr = rsaEncode(JSON.stringify(postStr));
var url = serverUrl + "/api/qiuhan/getSmsCode";
api.ajax({
url: url,
method: 'post',
data: {
values: {
data: encodeStr,
},
}
},function(ret, err){
if (ret) {
if(ret.status)
{
var decodeStr = JSON.parse(rsaDecode(ret.data));
if(decodeStr.status)
{
alert(decodeStr.message)
}else{
console.log('解密失败!');
}
}else{
console.log('返回失败!');
}
} else {
console.log(JSON.stringify( err ));
}
});
} else {
api.toast({
msg: '请输入正确的手机号码!',
duration: 2000,
location: 'bottom'
});
}
}
apiready = function() {
api.parseTapmode();
$('#verify_code').click(function() {
sendMobileValidSMSCode();
});
};相应的rsa.js内容,很好,比原来精减多了。
function rsaEncode(str) {
var encrypt = new JSEncrypt();
encrypt.setPublicKey(rsa_public);
var result = {};
return encrypt.encrypt(str);
}
function rsaDecode(str) {
var decrypt = new JSEncrypt();
decrypt.setPrivateKey(rsa_private);
return decrypt.decrypt(str);
} 相关文件在login_frm.html中引入一下即可,测试一下,android和ios均通过。