Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 27517|Ответ: 1

[Источник] .net/c# CryptoJS aes зашифрованный исходный код

[Скопировать ссылку]
Опубликовано 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# реализует отображение процессной памяти с файловой памятью
Опубликовано 29.05.2018 0:27:20 |
Обратись к продвинутому исходному коду большого парня
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com