|
|
Опубликовано 07.10.2017 17:39:00
|
|
|
|

Недавно я сделал функцию входа после симуляции: пароль для входа зашифрован CryptoJS aes, а затем я хочу написать соответствующий алгоритм на C# Введение в алгоритм шифрования AES:
Стандарт расширенного шифрования (сокращенно: AES), также известный как шифрование Рейндаэля в криптографии, — это стандарт блочного шифрования, принятый федеральным правительством США. Этот стандарт используется для замены оригинального DES и был проанализирован и широко использован по всему миру. После пятилетнего отбора Продвинутый криптографический стандарт был опубликован Национальным институтом стандартов и технологий (NIST) в FIPS PUB 197 26 ноября 2001 года и стал действительным 26 мая 2002 года. В 2006 году Advanced Encryption Standard стал одним из самых популярных алгоритмов для криптографии с симметричным ключом. Алгоритм js выглядит следующим образом:
Я искал онлайн-сайты по шифрованию AES в интернете, и результаты отличаются от моего собственного шифрования, у AES, похоже, много режимов, и я видел знакомства других людей из Интернета
Начните с подготовки открытого текста и ключа: var plaintText = 'ааа'; Открытый текст var keyStr = 'bbbbbbbbbbbbbbbb'; Обычно ключ — это струна Согласно официальной документации сайта, метод AES поддерживает AES-128, AES-192 и AES-256, а метод шифрования, используемый в процессе шифрования, зависит от типа входящего ключа, иначе он будет зашифрован согласно AES-256. CryptoJS поддерживает AES-128, AES-192 и AES-256. Вариант выберет по размеру ключа, который вы передаёте. Если использовать пароль, он генерирует 256-битный ключ. Поскольку Java задаётся по 128-битному формату, но поскольку это строка, её нужно конвертировать в 128-битную на фронтенде. Сначала я думал, что использование CryptoJS.enc.Hex.parse правильно конвертирует его в 128-битный ключ. Но в остальном... После множества попыток необходимо использовать метод CryptoJS.enc.Utf8.parse для конвертации ключа в 128-битный. Ну, поскольку говорят, что это несколько попыток, причина неизвестна, и позже это будет изучено глубже. Перед использованием тональности типа струны нужно разобраться с uft8, прежде чем использовать его var key = CryptoJS.enc.Utf8.parse(keyStr); Поскольку бэкенд использует PKCS5Padding, при использовании CryptoJS выяснилось, что смещения совсем нет. Шифрование var encryptedData = CryptoJS.AES.encrypt(plaintText, ключ, { режим: CryptoJS.mode.ECB, заполнение: CryptoJS.pad.Pkcs7 }); Поскольку шифротекст, сгенерируемый CryptoJS, является объектом, если вы конвертируете его напрямую в строку, это кодировка Base64, то атрибут на encryptedData.ciphertext преобразуется в строку — это формат, необходимый бэкенду. var encryptedBase64Str = encryptedData.toString(); Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY=' console.log(зашифрованный Base64Str); Вам нужно прочитать ciphertext.toString() на EncryptedData, чтобы получить тот же шифротекст, что и Java var encryptedStr = encryptedData.ciphertext.toString(); Выход: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06' console.log(encryptedStr); Поскольку зашифрованный шифротекст представляет собой 128-битную строку, при расшифровке его необходимо преобразовать в формат, закодированный Base64. Затем нужно использовать метод CryptoJS.enc.Hex.parse для конвертации в шестнадцатеричный, затем CryptoJS.enc.Base64.stringify для преобразования в строку, закодированную в Base64, а затем передать его методу CryptoJS.AES.decrypt для расшифровки. Чтобы получить шифротекст строкового типа, сначала нужно парсировать его методом Hex var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr); Преобразовать шифротекст в строки Base64 Только шифротекст строк типа Base64 может его расшифровать var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); Строка, преобразованная в кодирование Base64, может быть передана в метод CryptoJS.AES.decrypt для операции расшифровки. Расшифровка var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, ключ, { режим: CryptoJS.mode.ECB, заполнение: CryptoJS.pad.Pkcs7 }); После расшифровки CryptoJS он всё ещё остаётся объектом, и превращение его в открытый текст необходимо преобразовать в строку в формате Utf8. После расшифровки строку открытого текста необходимо транспонировать по принципу Utf8 var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log(расшифрованная сила); «Аа
Вот исходный код реализации AES в .NET/C#:
|
Предыдущий:[12306] Извините, потому что вы слишком часто управляете пассажирами, пожалуйста, попробуйте завтра сноваСледующий:C# реализует отображение процессной памяти с файловой памятью
|