Как сделать на питоне аналог JS CryptoJS.AES.encrypt(data, key, {format: CryptoJSAesJson}).toString()?

95
18 июня 2021, 16:40

Есть функция на ЯваСкрипте

CryptoJS.AES.encrypt(JSON.stringify(data), d, {format: CryptoJSAesJson}).toString()

На выходе выдает разные значения, например, "{"ct":"WRGouUKxcFHLSGReAWBNLg==","iv":"d32fe4b7635f0290e8a99114c9d01fe8","s":"e571997ee26f1c47"}"

Как мне сделать то же самое на python?

upd: Перепробовал десятки различных комбинаций и до сих пор мне не удалось добиться точно такого же результата, что получает функция CryptoJS.AES.encrypt. Как я понимаю, по умолчанию, она использует AES.MODE_ECB шифрование и паддинг по принципу pkcs7

Например, возьмем такие входные данные для JS:

var data = 'abc';
var d = 'zs0aneq7neem';
CryptoJS.AES.encrypt(JSON.stringify(data), d, {format: CryptoJSAesJson}).toString(); 

получим результат "{"ct":"0PhO/O4UezpeOK9+2Bj7Lg==","iv":"ec0b83442cdb700036a7ce7b5248df28","s":"0c53a0dd5a3ccdc3"}"

по идее для питона то же самое должно получиться в следующих строках

from Crypto.Cipher import AES
import base64, pkcs7
pad_text = pkcs7.PKCS7Encoder().encode('abc')
IV = 'ec0b83442cdb700036a7ce7b5248df28'
pad_key = pkcs7.PKCS7Encoder().encode('zs0aneq7neem')
aes = AES.new(pad_key, AES.MODE_ECB, IV)
res = base64.b64encode(aes.encrypt(pad_text))

но результат в res другой: 'Pp3wAckR5aFeAVipqVpFhw=='

возможно вместо pad_key надо использовать фактическую секретную фразу, т.е. "0c53a0dd5a3ccdc3", но и в этом случае мы получаем 'LhVrW1duY+0Jh1ucE/FEsg==', что отличается от результата яваскрипт.

Answer 1

На питоне можно отлично шифровать:
AES:
AES 256 English Stackoverflow
AES 128 Habr

RSA Module: https://pypi.org/project/rsa/

PyCrypto Module: https://pypi.org/project/pycrypto/

Cryptography module:https://pypi.org/project/cryptography/

Легкое гуглиние даст кучу всего по шифрованию, криптологии и криптоанализу на питоне.

READ ALSO
Добавить в скрипт JavaScript пустой поиск

Добавить в скрипт JavaScript пустой поиск

Нашел в интернете скрипт на JavascriptЧто-то типо поисковика

97
Почему не отменяет preventDefault()?

Почему не отменяет preventDefault()?

Я отменяю событие если поля пустые и когда они не будут пустые хочу включить событие

113
Функция в качестве аргумента функции. JavaScript

Функция в качестве аргумента функции. JavaScript

Я изучаю JavaScript, купил для этого книгиИ вот дошел к разделу "Функции в качестве аргумента другой функции"

79
Как сделать из изображения 1x1 > 4x3?

Как сделать из изображения 1x1 > 4x3?

Видел такое решение в некоторых интернет-магазинах: для изображения добавляется контейнер, при вставке изображения в контейнер оно растягивается...

109