Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 27517|Vastaus: 1

[Lähde] .net/c# CryptoJS AES:n salattu lähdekoodi

[Kopioi linkki]
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 huomenna
Seuraava:C# toteuttaa prosessimuistin kartoitustiedostojen jakomuistin
Julkaistu 29.5.2018 0.27.20 |
Katso ison miehen edistyneeseen lähdekoodiin
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com