|
|
Opslået på 07/10/2017 17.39.00
|
|
|
|

For nylig lavede jeg en post-simulation login-funktion, login-adgangskoden er krypteret af CryptoJS aes, og derefter vil jeg skrive den tilsvarende algoritme i C# Introduktion til AES-krypteringsalgoritmen:
Advanced Encryption Standard (forkortelse: AES), også kendt som Rijndael-kryptering i kryptografi, er en blokkrypteringsstandard, der er vedtaget af den amerikanske føderale regering. Denne standard bruges til at erstatte den oprindelige DES og er blevet analyseret og bredt anvendt verden over. Efter en femårig udvælgelsesproces blev Advanced Cryptographic Standard offentliggjort af National Institute of Standards and Technology (NIST) i FIPS PUB 197 den 26. november 2001 og blev en gyldig standard den 26. maj 2002. I 2006 blev Advanced Encryption Standard en af de mest populære algoritmer for symmetrisk nøglekryptografi. Js-algoritmen er som følger:
Jeg søgte efter online AES-krypteringssider på internettet, og resultaterne er anderledes end min egen kryptering, AES ser ud til at have mange tilstande, og jeg har set andres introduktioner fra internettet
Start med at forberede en klartekst og nøgle: var plaintText = 'aaaaa'; Klartekst var keyStr = 'bbbbbbbbbbbbbbbb'; Generelt er nøglen en streng Ifølge den officielle hjemmesidedokumentation understøtter AES-metoden AES-128, AES-192 og AES-256, og krypteringsmetoden, der anvendes i krypteringsprocessen, afhænger af typen af indkommende nøgle, ellers vil den blive krypteret i henhold til AES-256. CryptoJS understøtter AES-128, AES-192 og AES-256. Den vælger varianten ud fra størrelsen på den nøgle, du passerer i. Hvis du bruger en adgangskode, vil den generere en 256-bit nøgle. Da Java gives i henhold til 128bit, men da det er en streng, skal det konverteres til 128bit på frontend. Først troede jeg, at brugen af CryptoJS.enc.Hex.parse ville konvertere den korrekt til en 128-bit nøgle. Men ellers... Efter mange forsøg skal du bruge CryptoJS.enc.Utf8.parse-metoden til at konvertere nøglen til 128-bit. Nå, da det siges, at det er flere forsøg, er årsagen ikke kendt, og det vil blive studeret mere dybtgående senere. Før du bruger nøglen til strengtypen, skal du parse med uft8, før du kan bruge den var key = CryptoJS.enc.Utf8.parse(keyStr); Da backend bruger PKCS5Padding, men ved brug af CryptoJS blev det konstateret, at der slet ikke var nogen offset. Kryptering var encryptedData = CryptoJS.AES.encrypt(plaintText, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); Da chifferteksten genereret af CryptoJS er et objekt, hvis du konverterer den direkte til en streng, der er en Base64-kodet, er attributten på encryptedData. Chiffertekst konverteres til en streng i det format, backend kræver. var encryptedBase64Str = encryptedData.toString(); Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY=' console.log(encryptedBase64Str); Du skal læse ciphertext.toString() på encryptedData for at få den samme chiffertekst som Java var encryptedStr = encryptedData.ciphertext.toString(); Output: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06' console.log(krypteretStr); Da den krypterede chiffertekst er en 128-bit streng, skal den konverteres til Base64-kodet format ved dekryptering. Derefter skal du bruge metoden CryptoJS.enc.Hex.parse til at konvertere det til hexadecimalt, og derefter bruge CryptoJS.enc.Base64.stringify til at konvertere det til en Base64-kodede streng, og så kan du sende det videre til CryptoJS.AES.decrypt-metoden for at dekryptere det. For at få chifferteksten af strengtypen skal du først parse den med Hex-metoden var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr); Konverter chiffertekst til Base64-strenge Kun Base64-type strengchiffertekst kan dekryptere den var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); Den streng, der konverteres til Base64-kodning, kan sendes ind i CryptoJS.AES.decrypt-metoden til dekrypteringsoperation. Dekryptering var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); Efter CryptoJS-dekryptering er det stadig et objekt, og at omdanne det til klartekst skal konverteres til en streng i Utf8-format. Efter dekryptering skal klartekststrengen transponeres på samme måde som Utf8 var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log(dekrypteretStr); 'aaaaaa'
Her er kildekoden til .NET/C#-implementeringen af AES:
|
Tidligere:[12306] Undskyld, fordi du betjener passageren for ofte, prøv venligst igen i morgenNæste:C# implementerer proceshukommelsesmapping fildelingshukommelse
|