|
|
Közzétéve 2017. 10. 07. 17:39:00
|
|
|
|

Nemrég csináltam egy szimuláció utáni bejelentkezési függvényt, a bejelentkezési jelszót a CryptoJS aes titkosítja, majd szeretném megírni a megfelelő algoritmust C#-ban Bevezetés az AES titkosítási algoritmusba:
Az Advanced Encryption Standard (rövidítve: AES), más néven Rijndael titkosítás a kriptográfiában, egy blokk titkosítási szabvány, amelyet az Egyesült Államok szövetségi kormánya fogadott el. Ezt a szabványt az eredeti DES helyettesítésére használják, és világszerte elemezték, széles körben alkalmazták. Öt évig tartó kiválasztási folyamat után az Advanced Cryptographic Standard a National Institute of Standards and Technology (NIST) által 2001. november 26-án megjelent FIPS PUB 197-ben, és 2002. május 26-án érvényessé vált. 2006-ban az Advanced Encryption Standard lett az egyik legnépszerűbb algoritmus a szimmetrikus kulcsos kriptográfiához. A js algoritmus a következő:
Kerestem online AES titkosító weboldalakat az interneten, és az eredmények eltérnek az én titkosításomtól, az AES-nek sok módja van, és láttam mások bemutatkozásait az interneten
Kezdjük azzal, hogy elkészít egy tiszta szöveget és kulcsot: var plaintText = 'aaaaaaaa'; Egyszerű szöveg var keyStr = 'bbbbbbbbbb'; Általában a kulcs egy húr A hivatalos weboldal dokumentációja szerint az AES módszer támogatja az AES-128, AES-192 és AES-256 rendszereket, és a titkosítási módszer a bejövő kulcs típusától függ, különben az AES-256 szerint titkosítva lesz. A CryptoJS támogatja az AES-128, AES-192 és AES-256 rendszereket. A változatot a kulcs mérete alapján választja ki, amit beadsz. Ha jelszót használsz, akkor egy 256 bites kulcsot generál. Mivel a Java 128 bites szerint van megadva, de mivel egy string, a frontendben 128 bitre kell konvertálni. Eleinte azt hittem, hogy a CryptoJS.enc.Hex.parse segítségével helyesen átalakítja egy 128 bites kulcsra. De egyébként... Sok próbálkozás után a CryptoJS.enc.Utf8.parse módszerrel kell átalakítani a kulcsot 128 bitessé. Nos, mivel azt mondják, hogy többszörös próbálkozásról van szó, akkor az ok nem ismert, és később mélyebben fogjuk vizsgálni. Mielőtt használnád a húrtípus kulcsát, először uft8-cal kell parsedoznod, mielőtt használhatnád var key = CryptoJS.enc.Utf8.parse(keyStr); Mivel a háttérrendszer PKCS5Paddinget használ, de CryptoJS használatában kiderült, hogy egyáltalán nincs eltolás. Titkosítás var encryptedData = CryptoJS.AES.encrypt(plaintText, key, { mód: CryptoJS.mode.ECB, tömnázás: CryptoJS.pad.Pkcs7 }); Mivel a CryptoJS által generált titkosított szöveg objektum, ha közvetlenül egy Base64 kódolt stringjűre konvertáljuk, az encryptedData.ciphertext attribútuma egy stringgé konvertálódik, ami a háttérrendszer által igényelt formátum. var encryptedBase64Str = encryptedData.toString(); Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY=' console.log(titkosítottBase64Str); A ciphertext.toString() kódot kell olvasnod az encryptedData-n, hogy ugyanazt a titkosított szöveget kapd, mint a Java-ban var encryptedStr = encryptedData.ciphertext.toString(); Kimenet: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06' console.log(titkosítottStr); Mivel a titkosított titkosított szöveg 128 bites string, a dekódoláskor Base64 kódolt formátumra kell konvertálni. Ezután a CryptoJS.enc.Hex.parse módszerrel át kell alakítani hexadecimalá, majd a CryptoJS.enc.Base64.stringify segítségével Base64 kódolt stringjűre konvertálhatod, majd átadhatod a CryptoJS.AES.decrypt metódusnak a dekódoláshoz. Ahhoz, hogy megkapjuk a string típus titkosított szövegét, először Hex módszerrel kell parzálni. var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr); Titkosított szöveg átalakítása Base64 stringekre Csak a Base64 típusú titkosított szöveg tudja ezt megfejteni var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); A Base64 kódolóra konvertált string átvihető a CryptoJS.AES.decrypt módszerbe a dekódolási műveletekhez. Fejtés var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, { mód: CryptoJS.mode.ECB, tömnázás: CryptoJS.pad.Pkcs7 }); A CryptoJS dekódolás után még mindig objektum, és a tiszta szöveggé alakításához Utf8 formátumú stringre kell konvertálni. A titkosítás után a tiszta szöveg láncsorát az Utf8 módján kell áthelyezni var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log(dekódoltStr); 'aaaaaaaa'
Íme az AES .NET/C# implementációjának forráskódja:
|
Előző:[12306] Bocsánat, mert túl gyakran vezeti az utast, kérem, próbálja meg újra holnapKövetkező:C# megvalósítja a folyamatmemória leképező fájlmegosztási memóriát
|