Мне нужно пройти аутентификацию на сервере без использования браузера, вместо этого я хочу создать скрипт python, который сделает эту работу за меня. Этот сервер использует JCryption 1.1. js, который предположительно использует шифрование обычного текста RSA (RSA / ECB / заполнение нулями)
$.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) и maxdigits , Это пример:
{ "е": "10001", "п": "f74ae94f55cc2dcfa92d4f82d1f4816e99b4082d4d459aed0dda228273eceb305021c17ac3d49e76cdc5c0e49038a361c8e465326e5fb6c418ddbf28a407dfd7", "maxdigits": "67"}
С пара ключей выше, если я представить пароль «тест» я получаю эту зашифрованную строку:
«5912c99d8fd7bd26b7e99a1bb80e5b20f540527db7fe4c1e45548226efab376bdf232b975bab346845dcdbf1578387bc03f17261b5947ccc4cf2407c2baa42b0»
Я попытался шифровать себя пароль и имя пользователя, используя PyCrypto, я не получил ту же зашифрованную строку.
У кого-нибудь есть решение?