|
|
Публикувано в 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# реализира картографиране на файловата памет на процеси
|