|
|
Julkaistu 7.10.2017 17.39.00
|
|
|
|

Äskettäin tein simulaation jälkeisen kirjautumistoiminnon, jossa kirjautumissalasana salataan CryptoJS AES:llä, ja haluan kirjoittaa vastaavan algoritmin C#:lla Johdatus AES-salausalgoritmiin:
Advanced Encryption Standard (lyhenne: AES), joka tunnetaan kryptografiassa myös nimellä Rijndael-salaus, on Yhdysvaltain liittovaltion hallituksen hyväksymä lohkosalausstandardi. Tätä standardia käytetään korvaamaan alkuperäinen DES, ja sitä on analysoitu sekä laajasti käytetty ympäri maailmaa. Viiden vuoden valintaprosessin jälkeen Advanced Cryptographic Standard julkaistiin National Institute of Standards and Technologyn (NIST) toimesta FIPS PUB 197:ssä 26. marraskuuta 2001, ja siitä tuli voimassa oleva standardi 26. toukokuuta 2002. Vuonna 2006 Advanced Encryption Standard nousi yhdeksi suosituimmista symmetrisen avaimen kryptografian algoritmeista. js-algoritmi on seuraava:
Etsin netistä AES-salaussivustoja internetistä, ja tulokset eroavat omasta salauksestani, AES:ssä vaikuttaa olevan monia tiloja, ja olen nähnyt muiden ihmisten esittelyjä internetistä
Aloita laatimalla selväkieli ja avain: var plaintText = 'aaaaaaaa'; Selvä teksti var keyStr = 'bbbbbbbb'; Yleisesti ottaen avain on kieli Virallisen verkkosivuston dokumentaation mukaan AES-menetelmä tukee AES-128-, AES-192- ja AES-256-menetelmää, ja salausmenetelmä riippuu saapuvan avaimen tyypistä, muuten avain salataan AES-256:n mukaisesti. CryptoJS tukee AES-128-, AES-192- ja AES-256-malleja. Se valitsee variantin sen perusteella, kuinka suuri avain annat sisään. Jos käytät salasanaa, se tuottaa 256-bittisen avaimen. Koska Java annetaan 128-bittisen mukaan, mutta koska se on merkkijono, se täytyy muuntaa 128-bittisiksi frontendissä. Aluksi ajattelin, että CryptoJS.enc.Hex.parse muuntaisi sen oikein 128-bittiseksi avaimeksi. Mutta muuten... Monien yritysten jälkeen sinun täytyy käyttää CryptoJS.enc.Utf8.parse -menetelmää muuntaaksesi avaimen 128-bittiseksi. No, koska sanotaan, että yrityksiä on useita, syytä ei tiedetä, ja sitä tutkitaan myöhemmin syvällisemmin. Ennen kuin käytät kielityypin avainta, sinun täytyy jäsentää uft8:lla ennen kuin voit käyttää sitä var key = CryptoJS.enc.Utf8.parse(keyStr); Koska taustajärjestelmä käyttää PKCS5Paddingia, CryptoJS:ää käytettäessä havaittiin, ettei offsetia ollut lainkaan. Salaus var encryptedData = CryptoJS.AES.encrypt(plaintText, key, { tila: CryptoJS.mode.ECB, pehmustet: CryptoJS.pad.Pkcs7 }); Koska CryptoJS:n tuottama salateksti on objekti, jos muunnat sen suoraan Base64-koodatuksi merkkijonoksi, encryptedData.ciphertextin attribuutti muunnetaan merkkijonoksi, joka on taustajärjestelmän vaatima muoto. var encryptedBase64Str = encryptedData.toString(); Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY=' console.log(salattuBase64Str); Sinun täytyy lukea ciphertext.toString() encryptedDatalla saadaksesi saman salatun tekstin kuin Java var encryptedStr = encryptedData.ciphertext.toString(); Tulostus: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06' console.log(salattuStr); Koska salattu salattu teksti on 128-bittinen merkkijono, se täytyy muuntaa Base64-koodatuksi purkaessa. Sitten sinun täytyy käyttää metodia CryptoJS.enc.Hex.parse muuntaaksesi sen heksadesimaaliksi, ja sitten käyttää CryptoJS.enc.Base64.stringify muuntaaksesi sen Base64-koodatuksi merkkijonoksi, ja sitten voit välittää sen CryptoJS.AES.decrypt-menetelmälle purkaaksesi sen. Saadaksesi merkkijonotyypin salatun tekstin, sinun täytyy ensin jäsentää se Hex-menetelmällä var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr); Muunna salattu teksti Base64-merkkijonoiksi Vain Base64-tyyppinen merkkijono-salateksti voi purkaa sen var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); Base64-koodaukseen muunnettu merkkijono voidaan välittää CryptoJS.AES.decrypt-menetelmään salauksen purkua varten. Purku var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, { tila: CryptoJS.mode.ECB, pehmustet: CryptoJS.pad.Pkcs7 }); CryptoJS:n purkamisen jälkeen se on edelleen objekti, ja sen muuttaminen selväksi tekstiksi täytyy muuntaa merkkijonoksi Utf8-muodossa. Purkamisen jälkeen selväkielimerkkijono täytyy transponoida Utf8-tyyliin var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log(purettu Str); 'aaaaaaaa'
Tässä on AES:n .NET/C#-toteutuksen lähdekoodi:
|
Edellinen:[12306] Anteeksi, koska ajat matkustajaa liian usein, yritä uudelleen huomennaSeuraava:C# toteuttaa prosessimuistin kartoitustiedostojen jakomuistin
|