我需要在不使用浏览器的情况下对服务器进行身份验证,相反,我想创建一个python脚本来完成这项工作。此服务器使用JCryption 1.1.js,该服务器假定使用明文RSA加密(RSA/ECB/null padding)
$.jCryption.encrypt = function (string, keyPair, callback) {
var charSum = 0;
for (var i = 0; i < string.length; i++) {
charSum += string.charCodeAt(i);
}
var tag = '0123456789abcdef';
var hex = '';
hex += tag.charAt((charSum & 0xF0) >> 4) + tag.charAt(charSum & 0x0F);
var taggedString = hex + string;
var encrypt = [];
var j = 0;
while (j < taggedString.length) {
encrypt[j] = taggedString.charCodeAt(j);
j++;
}
while (encrypt.length % keyPair.chunkSize !== 0) {
encrypt[j++] = 0;
}
function encryption(encryptObject) {
var charCounter = 0;
var j, block;
var encrypted = "";
function encryptChar() {
block = new BigInt();
j = 0;
for (var k = charCounter; k < charCounter + keyPair.chunkSize; ++j) {
block.digits[j] = encryptObject[k++];
block.digits[j] += encryptObject[k++] << 8;
}
var crypt = keyPair.barrett.powMod(block, keyPair.e);
var text = keyPair.radix == 16 ? biToHex(crypt) : biToString(crypt, keyPair.radix);
encrypted += text + " ";
charCounter += keyPair.chunkSize;
if (charCounter < encryptObject.length) {
setTimeout(encryptChar, 1)
} else {
var encryptedString = encrypted.substring(0, encrypted.length - 1);
if ($.isFunction(callback)) {
callback(encryptedString);
} else {
return encryptedString;
}
}
}
setTimeout(encryptChar, 1);
}
encryption(encrypt);
};
服务器向我发送模数(n)、指数(e)和最大数字。 这是一个例子:
{"e":"10001","n":"f74ae94f55cc2dcfa92d4f82d1f4816e99b4082d4d459aed0dda228273eceb305021c17ac3d49e76cdc5c0e49038a361c8e465326e5fb6c418ddbf28a407dfd7","maxdigits":"67"}
使用上面的密钥对,如果我提交密码“test”,我会得到以下加密字符串:
"5912c99d8fd7bd26b7e99a1bb80e5b20f540527db7fe4c1e45548226efab376bdf232b975bab346845dcdbf1578387bc03f17261b5947ccc4cf2407c2baa42b0"
我尝试使用pyCrypto对自己的密码和用户名进行加密,但没有得到相同的加密字符串
有人有解决办法吗
目前没有回答
相关问题 更多 >
编程相关推荐