在线测试姆盯软件接口

发表时间:2020-12-02 04:39:21
摘要信息

姆盯验证系统官网传送门


姆盯验证系统官网传送门

给手动封装POST的用户开发的一个在线测试姆盯软件接口的网站

在线测试传送门

在线测试帮助


如果返回的密文解密之后出现乱码,可以进行url解码,如果不行那就是软件的编码问题,默认是utf-8

请先将软件加密方法设置为RSA/AES/DES其中的一种,本测试工具暂不支持自定义加解密

请先将软件的签名算法设置为MD5,本测试工具不支持自定义MD5以及默认的签名算法

RSA加密 请使用PKCS1_PADDING填充模式

加密方式及填充方式参考:

RSA: PKCS1_PADDING 秘钥长度要大于1024

本示例中使用CryptoJS来进行AES/DES加解密

AES: mode:CBC 填充:Pkcs7

DES: mode:CBC 填充:Pkcs7

DES 加密解密 需要截取原key/iv的前8位

如果对加密解密方式有不理解的可以查看PHP源代码,加密源码位置:/web根目录/extend

RSA加密前请先对加密文本进行base64编码处理!

RSA加密无法处理过长的字符串,所以在加密前请先将明文转字符串,然后base64编码之后,按106长度分割成数组,然后对数组子项加密,注意这里不要将整个数组加密,只是 将数组的子项目进行加密,这样就避免了无法加密过长字符串的问题

RSA解密,从服务器传回来的是一串子项目被加密的数组,要对这个数组进行解密,然后依次拼接即是完整的json字符串,然后对json字符串进行序列化

本例子中使用RSA加密工具为【node-rsa】

如果你使用的开发工具中可以运行JS,可以找我获取JS加密工具,后期将会出javascript的SDK

RSA加密的示例:

rsaEncrypt(str) {
// this.soft.publicKey 公钥
let encrypt = NodeRSA(this.soft.publicKey) // 初始化公钥
let base64 = window.btoa(str.toString()) // 将要加密的字符串进行BASE64 编码
let arr = this.splitStr(base64) // 将base64字符串 进行长度106的分割, 分割成数组
encrypt.setOptions({encryptionScheme: 'pkcs1'}) // 修改rsa加密的填充方式
let keyArr = []
arr.forEach((item, index) => {
keyArr.push(encrypt.encrypt(item,'base64')) // 分批将数组的项目加密,然后push到新数组中
})
return keyArr // 返回已经加密OK的数组

}

RSA解密的示例:

/**
*
* @param key 公钥
* @param data 代解密的密文
* @returns {*}
*/
rsaDecrypt(key, data) {
let verify = new NodeRSA(key);
return verify.decryptPublic(data,'utf-8')
}

DES加密的示例:

export const DesDecrypt = function (str, key, iv) {
var key = CryptoJS.MD5(key).toString();
var iv = CryptoJS.MD5(iv).toString();
var crypto_key = CryptoJS.enc.Utf8.parse(key);
var crypto_iv = CryptoJS.enc.Utf8.parse(iv.substr(0, 8));
var decrypt_str = CryptoJS.TripleDES.decrypt(str, crypto_key, {
iv: crypto_iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return decrypt_str.toString(CryptoJS.enc.Utf8);
}

DES解密的示例

export const DesEncrypt = function (str, key, iv) {
var encode_str = '';
var key = CryptoJS.MD5(key).toString();
var iv = CryptoJS.MD5(iv).toString();
var crypto_key = CryptoJS.enc.Utf8.parse(key);
var crypto_iv = CryptoJS.enc.Utf8.parse(iv.substr(0, 8));
encode_str = CryptoJS.TripleDES.encrypt(str, crypto_key, {
iv: crypto_iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encode_str.toString();
}

AES加密的示例

export const AesEncrypt =  function (data, key, iv) {
var encrypted = '';
var text = data;
text = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(text)).toString();
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
encrypted = CryptoJS.AES.encrypt(text, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString();
return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(encrypted)).toString();
}

AES解密的示例

export const AesDecrypt =  function (data, key, iv) {
var encrypted = CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(data)).toString();
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Utf8);
return decodeURIComponent(decodeURIComponent(CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(decrypted)).toString()));
}


40% Complete (success)