У меня есть пароль, который шифрует с помощью JavaScriptКак расшифровать пароль из JavaScript CryptoJS.AES.encrypt (пароль, парольная фраза) в Python
var password = 'sample'
var passphrase ='sample_passphrase'
CryptoJS.AES.encrypt(password, passphrase)
Затем я попытался расшифровать пароль приходит из JavaScript в Python :
from Crypto.Cipher import AES
import base64
PADDING = '\0'
pad_it = lambda s: s+(16 - len(s)%16)*PADDING
key = 'sample_passphrase'
iv='11.0.0.101' #------> here is my question, how can I get this iv to restore password, what should I put here?
key=pad_it(key) #------> should I add padding to keys and iv?
iv=pad_it(iv) ##
source = 'sample'
generator = AES.new(key, AES.MODE_CFB,iv)
crypt = generator.encrypt(pad_it(source))
cryptedStr = base64.b64encode(crypt)
print cryptedStr
generator = AES.new(key, AES.MODE_CBC,iv)
recovery = generator.decrypt(crypt)
print recovery.rstrip(PADDING)
Я проверил JS из консоли браузера, он показывает IV в CryptoJS.AES.encrypt(password, passphrase)
является объектом с некоторыми атрибутами (например, sigBytes:16, words: [-44073646, -1300128421, 1939444916, 881316061]
). Кажется, создается случайным образом.
С одной веб-страницы, он говорит мне, что JS имеет два способа шифрования пароля (reference link):
- а.
crypto.createCipher(algorithm, password)
- b.
crypto.createCipheriv(algorithm, key, iv)
То, что я видел в JavaScript должен быть вариант а. Однако только вариант b эквивалентен AES.new() в python.
Вопросов:
Как я могу восстановить этот пароль в Python без изменения кода JavaScript?
Если мне нужно IV в Python, как я могу получить его из пароля, который используется в JavaScript?
CryptoJS AES по умолчанию работает в режиме CBC, поэтому никакого режима CBF в python не требуется. AES.encrypt возвращает также объект. с toString() вы получаете кодировку base64, содержащую соль, iv и сообщение. Все они вам нужно разделить конец фида на Python. также помните, что пароль и ключ - это две разные вещи. – SKR
Спасибо, просто измените ключ на sample_passphrase, чтобы он стал более понятным. но это, если я не могу получить toString() вывод? Это становится невозможной работой? @SKR – Bing
, значит, вы имеете в виду, что у вас нет контроля над js? Как js-код продолжается? что происходит с объектом, который был зашифрован? Вы должны каким-то образом получить соль и iv из js. Или вы просто хотите «высмеять» поведение js и создать аналогичное зашифрованное сообщение для внешнего api или что-то еще? – SKR