Как скопировать метод шифрования JCryption1.1. js в python или java - PullRequest
1 голос
/ 13 апреля 2020

Мне нужно пройти аутентификацию на сервере без использования браузера, вместо этого я хочу создать скрипт 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, я не получил ту же зашифрованную строку.

У кого-нибудь есть решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...