|
|
Objavljeno na 7. 10. 2017 17:39:00
|
|
|
|

Nedavno sem uporabil funkcijo prijave po simulaciji, geslo za prijavo je šifrirano s CryptoJS aes, nato pa želim napisati ustrezni algoritem v C# Uvod v AES šifrirni algoritem:
Napredni standard šifriranja (okrajšava: AES), znan tudi kot Rijndael šifriranje v kriptografiji, je standard blokovnega šifriranja, ki ga je sprejela zvezna vlada ZDA. Ta standard se uporablja kot nadomestilo za izvirni DES in je bil analiziran ter široko uporabljen po vsem svetu. Po petletnem izbirnem postopku je Napredni kriptografski standard objavil Nacionalni inštitut za standarde in tehnologijo (NIST) v FIPS PUB 197 dne 26. novembra 2001 in je postal veljaven standard 26. maja 2002. Leta 2006 je napredni standard šifriranja postal eden najbolj priljubljenih algoritmov za kriptografijo s simetričnim ključem. algoritem js je naslednji:
Iskal sem spletne strani za AES šifriranje na internetu in rezultati se razlikujejo od mojega šifriranja, AES ima veliko načinov, videl pa sem tudi uvode drugih ljudi z interneta
Začnite s pripravo izvirnega besedila in ključa: var plaintText = 'aaaaa'; Navadno besedilo var keyStr = 'bbbbbbbbbbbbbbbb'; Na splošno je ključ struna Po uradni spletni dokumentaciji metoda AES podpira AES-128, AES-192 in AES-256, metoda šifriranja, uporabljena v procesu šifriranja, pa je odvisna od vrste vhodnega ključa, sicer bo šifrirana po AES-256. CryptoJS podpira AES-128, AES-192 in AES-256. Izbere različico glede na velikost ključa, ki ga vnesete. Če uporabite geslo, bo to generiralo 256-bitni ključ. Ker je Java dana glede na 128bit, a ker gre za niz, ga je treba na frontendu pretvoriti v 128bit. Sprva sem mislil, da bo uporaba CryptoJS.enc.Hex.parse pravilno pretvorila v 128-bitni ključ. Ampak drugače... Po več poskusih morate uporabiti metodo CryptoJS.enc.Utf8.parse, da pretvorite ključ v 128-bitno. Ker se pravi, da gre za več poskusov, potem razlog ni znan in bo kasneje podrobneje razučen. Preden uporabiš tonaliteto vrste strune, moraš najprej razčleniti z uft8, preden jo lahko uporabiš var key = CryptoJS.enc.Utf8.parse(keyStr); Ker backend uporablja PKCS5Padding, je bilo ugotovljeno, da pri uporabi CryptoJS ni bilo nobenega offseta. Šifriranje var encryptedData = CryptoJS.AES.encrypt(plaintText, key, { način: CryptoJS.mode.ECB, polnilo: CryptoJS.pad.Pkcs7 }); Ker je šifrirano besedilo, ki ga generira CryptoJS, objekt, če ga neposredno pretvorite v niz z Base64 kodiranjem, je atribut na encryptedData.ciphertext pretvorjen v niz format, ki ga zahteva backend. var encryptedBase64Str = encryptedData.toString(); Izhod: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY=' console.log(encryptedBase64Str); Za enako šifrirano besedilo kot Java morate prebrati ciphertext.toString() na encryptedData var encryptedStr = encryptedData.ciphertext.toString(); Izhod: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06' console.log(encryptedStr); Ker je šifrirano šifrirano besedilo 128-bitni niz, ga je treba pri dešifriranju pretvoriti v Base64 kodiran format. Nato morate uporabiti metodo CryptoJS.enc.Hex.parse za pretvorbo v šestnajstiško obliko, nato uporabiti CryptoJS.enc.Base64.stringify za pretvorbo v Base64 kodiran niz, nato pa ga lahko posredujete metodi CryptoJS.AES.decrypt za dešifriranje. Za pridobitev šifriranega besedila tipa niza ga morate najprej razčleniti s heksadecimalno metodo var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr); Pretvorba šifriranega besedila v Base64 nize Le šifrirano besedilo tipa Base64 lahko dešifrira var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); Niz, pretvorjen v Base64 kodiranje, se lahko posreduje metodi CryptoJS.AES.decrypt za operacijo dešifriranja. Dešifriranje var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, { način: CryptoJS.mode.ECB, polnilo: CryptoJS.pad.Pkcs7 }); Po dešifriranju s CryptoJS je še vedno objekt, za njegovo pretvorbo v čisto besedilo pa je treba pretvoriti v niz v formatu Utf8. Po dešifriranju je treba niz odprtega besedila zamenjati na način Utf8 var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log(decryptedStr); 'aaaaa'
Tukaj je izvorna koda za implementacijo AES v .NET/C#:
|
Prejšnji:[12306] Oprostite, ker prepogosto upravljate potnika, poskusite znova jutriNaslednji:C# izvaja preslikavo procesnega pomnilnika za deljenje datotečnega pomnilnika
|