Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 27517|Відповідь: 1

[Джерело] .net/c# КриптоJS 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, key, {  
    режим: 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();  
Вихід: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec565d2e06'
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 00:27:20 |
Зверніться до просунутого вихідного коду великого хлопця
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com