Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 27517|Отговор: 1

[Източник] .net/c# CryptoJS aes криптиран изходен код

[Копирай линк]
Публикувано в 7.10.2017 г. 17:39:00 ч. | | | |
Наскоро направих функция за вход след симулация, паролата за вход е криптирана от CryptoJS aes, а след това искам да напиша съответния алгоритъм на C#
Въведение в алгоритъма за криптиране на AES:

Стандартът за усъвършенствано криптиране (съкращение: AES), известен още като криптиране на Rijndael в криптографията, е стандарт за блоково криптиране, приет от федералното правителство на САЩ. Този стандарт се използва за замяна на оригиналния DES и е анализиран и широко използван по целия свят. След петгодишен процес на подбор, Напредналият криптографски стандарт беше публикуван от Националния институт по стандарти и технологии (NIST) в FIPS PUB 197 на 26 ноември 2001 г. и стана валиден на 26 май 2002 г. През 2006 г. Стандартът за усъвършенствано криптиране стана един от най-популярните алгоритми за криптография с симетричен ключ.

Алгоритъмът js е следният:



Търсих онлайн сайтове за криптиране на AES в интернет и резултатите се различават от моите собствени криптирания, AES изглежда има много режими, и съм виждал представяния на други хора от интернет


Започнете, като подготвите открит текст и ключ:
var жалбаТекст = 'аа'; Обикновен текст
var keyStr = 'bbbbbbbbbbbbbb'; Обикновено ключът е струна  
Според официалната документация на уебсайта, методът 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(дешифриранStr); 'Аа




Ето изходния код за .NET/C# имплементацията на AES:







Предишен:[12306] Съжалявам, защото управлявате пътника твърде често, моля, опитайте отново утре
Следващ:C# реализира картографиране на файловата памет на процеси
Публикувано в 29.05.2018 г. 0:27:20 ч. |
Вижте напредналия изходен код на големия човек
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com