У меня есть приложение Java, которое использует «AES-128 бит/ECB/PKCS5Padding» (Java8 Linux/Window), код довольно прост
KeyGenerator keygen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(seed.getBytes());
keygen.init(128, secureRandom);
...
< /code>
Потому что я не могу найти javaScript, эквивалентный алгоритму sha1prng Я не могу расшифровать текст с помощью кода JS. Но после прочтения дешифтирует AES/CBC/PKCS5Padding с криптоми, и с некоторыми испытаниями я обнаружил, что для семян 128 бит (шестнадцатеричная строка 32 бита), используя SHA1PRNG в Java, я могу получить один и тот же результат от SHA1 дважды в JS
CryptoJS.SHA1(CryptoJS.SHA1(seed)).toString().substring(0, 32) //using 'crypto-js'
< /code>
Код Python здесь также подтверждает это! Но почему? < /P>
def get_sha1prng_key(key):
'''[summary]
encrypt key with SHA1PRNG
same as java AES crypto key generator SHA1PRNG
Arguments:
key {[string]} -- [key]
Returns:
[string] -- [hexstring]
'''
signature = hashlib.sha1(key.encode()).digest()
signature = hashlib.sha1(signature).digest()
return ''.join(['%02x' % i for i in signature]).upper()[:32]
< /code>
---- Обновление ---- < /p>
Комментарии, которые я получил. Мой вопрос-дублированный вопрос. Но я проверил эти 2 вопроса, и я так не думаю. Но во -первых, я знал, что коды Java неправильно используют генератор псевдо случайных чисел, и это семя в качестве ключевой функции вывода, это плохо. Но на самом деле это кто-то другой коды, и моя задача состоит в том, чтобы использовать JS для расшифровки зашифрованного текста. Класс < /p>
"sha1prng" - это имя псевдо -генератора случайных чисел (prng
в имени). Это означает, что он использует функцию хэша SHA1 для
генерировать поток случайных чисел ... нет четкого описания доступного алгоритма < /p>
< /blockquote>
Подробнее здесь: https://stackoverflow.com/questions/647 ... a-sha1prng
JavaScript, эквивалентный Java Sha1prng ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение