Расшифровка AES в питоне

Я отправляю учетные данные из внешнего интерфейса, используя метод $.ajax, и я использовал для шифрования учетных данных с помощью crypto.js.

код javascript

var encrypted = CryptoJS.AES.encrypt("Message", "This is a key123", { mode: CryptoJS.mode.CFB});

$.ajax({
        type: "POST",
        url: $SCRIPT_ROOT + "/test",
        contentType: "application/json",
        data:JSON.stringify({key:encrypted.toString()}),
        dataType: "json",
        success: function (response) {
            alert(response);
        }
    });

те же учетные данные, которые я хочу расшифровать на внутренней стороне, которая находится в колбе python.

код питона

data = request.json
key = data["key"]
obj2 = AES.new('This is a key123', AES.MODE_CFB)
s = obj2.decrypt(key)
print s

я использовал один и тот же режим при шифровании и дешифровании, но print s напечатает следующую строку.

 �Qg%��qNˮ�Ŵ�M��ĦP�
                  "~�JB���w���#]�v?W

кто-нибудь может предложить мне лучший способ сделать шифрование-дешифрование во внешнем и внутреннем интерфейсе?

я пробовал такое же шифрование-дешифрование только в python,

>>> from Crypto.Cipher import AES
>>> obj = AES.new('This is a key123', AES.MODE_CFB)
>>> message = "The answer is no"
>>> ciphertext = obj.encrypt(message)
>>> ciphertext
'\x1f\x99%8\xa8\x197%\x89U\xb6\xa5\xb6C\xe0\x88'
>>> obj2 = AES.new('This is a key123', AES.MODE_CFB)
>>> obj2.decrypt(ciphertext)
'The answer is no'

он работает нормально, но я хочу зашифровать данные во внешнем интерфейсе с помощью javascript, и я хочу использовать ту же технику дешифрования в python.


person Jaydipsinh    schedule 18.06.2014    source источник
comment
encrypted.toString() — плохой способ преобразования зашифрованного текста в строку. Используйте текстовое представление Base64 или HEX и преобразуйте его в код JS и Python соответственно.   -  person Oleg Estekhin    schedule 18.06.2014
comment
@OlegEstekhin, не могли бы вы предложить мне какой-нибудь рабочий пример?   -  person Jaydipsinh    schedule 18.06.2014
comment
@OlegEstekhin я обновил свой вопрос.   -  person Jaydipsinh    schedule 18.06.2014


Ответы (1)


Строка, которую вы передаете CryptoJS.AES.encrypt, не используется напрямую в качестве ключа (после кодирования utf8), как это, вероятно, делает код Python, а вместо этого используется в качестве пароля для получения ключа каким-либо образом. См.: https://code.google.com/p/crypto-js/#The_Cipher_Input. .

Кроме того, вывод также кодируется как строка печатных символов и не представляет собой строку необработанных байтов, которая требуется коду Python. См.: https://code.google.com/p/crypto-js/#The_Cipher_Output. .

person Perseids    schedule 18.06.2014
comment
Я прочитал эту документацию, но не знаю, как ее использовать на стороне javascript и на стороне python. не могли бы вы предложить мне хорошую статью или рабочий пример по этому поводу? - person Jaydipsinh; 18.06.2014
comment
В более широком масштабе, какую проблему вы пытаетесь решить? Похоже, что получение и публикация всех ваших данных через https удовлетворит ваше требование конфиденциальности и устранит несколько других проблем с безопасностью, которые, как я полагаю, у вас есть. @Джейдипсинх - person Perseids; 18.06.2014
comment
видите, я хочу зашифровать учетные данные aws, предоставленные пользователем, и мне нужно передать эти зашифрованные учетные данные на сервер, который находится во фляге, там мне нужно расшифровать учетные данные. это то, что я хочу сделать - person Jaydipsinh; 18.06.2014
comment
Поэтому передайте учетные данные через https, что обеспечит аутентифицированное и зашифрованное соединение с использованием TLS, которое будет лучше спроектировано и более безопасно, чем что-либо, что вы создадите самостоятельно. @Джейдипсинх - person Perseids; 18.06.2014