See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 27517|Vastuse: 1

[Allikas] .net/c# CryptoJS aes krüpteeritud lähtekood

[Kopeeri link]
Postitatud 07.10.2017 17:39:00 | | | |
Hiljuti tegin simulatsioonijärgse sisselogimisfunktsiooni, sisselogimisparool krüpteeritakse CryptoJS AES-iga ja siis tahan kirjutada vastava algoritmi C# keeles
Sissejuhatus AES-i krüpteerimisalgoritmi:

Advanced Encryption Standard (lühend: AES), tuntud ka kui Rijndaeli krüpteerimine krüptograafias, on plokkkrüpteerimise standard, mille on vastu võtnud USA föderaalvalitsus. Seda standardit kasutatakse algse DES-i asendamiseks ning seda on analüüsitud ja laialdaselt kasutatud üle kogu maailma. Pärast viieaastast valikuprotsessi avaldas National Institute of Standards and Technology (NIST) Advanced Cryptographic Standard FIPS PUB 197-s 26. novembril 2001 ning see sai kehtivaks standardiks 26. mail 2002. 2006. aastal sai Advanced Encryption Standard üheks populaarseimaks sümmeetrilise võtmega krüptograafia algoritmiks.

js algoritm on järgmine:



Otsisin internetist AES-i krüpteerimise veebilehti ja tulemused erinevad minu enda krüpteerimisest, AES-il tundub olevat palju režiime ning olen näinud teiste tutvustusi internetist


Alusta selge teksti ja võtme ettevalmistamisest:
var plaintText = 'aaaaaaaa'; Selge tekst
var keyStr = 'bbbbbbbb'; Üldiselt on võti string  
Ametliku veebilehe dokumentatsiooni kohaselt toetab AES-meetod AES-128, AES-192 ja AES-256 meetodeid ning krüpteerimismeetod sõltub saabuva võtme tüübist, vastasel juhul krüpteeritakse see vastavalt AES-256-le.
CryptoJS toetab AES-128, AES-192 ja AES-256. See valib variandi võtme suuruse järgi, mille sisse antakse. Kui kasutad paroolifraasi, genereerib see 256-bitise võtme.
Kuna Java on antud vastavalt 128-bitisele, kuid kuna tegemist on stringiga, tuleb see frontendis teisendada 128-bitiseks.
Alguses arvasin, et CryptoJS.enc.Hex.parse kasutamine konverteerib selle õigesti 128-bitiseks võtmeks. Aga muidu...
Pärast mitmeid katseid tuleb võtta võti 128-bitiseks teisendamiseks CryptoJS.enc.Utf8.parse meetodit. Kuna öeldakse, et tegemist on mitme katsega, siis põhjust ei teada ja seda uuritakse hiljem põhjalikumalt.
Enne stringitüübi võtme kasutamist pead enne kasutamist parseerima uft8-ga, enne kui saad seda kasutada
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Kuna taustsüsteem kasutab PKCS5Paddingut, siis CryptoJS-i kasutades leiti, et nihke üldse ei olnud.
Krüpteerimine
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    mode: CryptoJS.mode.ECB,
    täitmine: CryptoJS.pad.Pkcs7
});
Kuna CryptoJS-i genereeritud šifritekst on objekt, siis kui sa teisendad selle otse Base64 kodeeritud stringiks, konverteeritakse encryptedData.ciphertext'i atribuut stringiks, mida taustasüsteem nõuab.
var encryptedBase64Str = encryptedData.toString();
Väljund: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(krüpteeritudBase64Str);
EncryptedData peal tuleb lugeda ciphertext.toString() faili, et saada sama šifritekst nagu Java
var encryptedStr = encryptedData.ciphertext.toString();  
Väljund: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(krüpteeritudStr);  
Kuna krüpteeritud šifritekst on 128-bitine string, tuleb see dekrüpteerimisel konverteerida Base64 kodeeritud vormingusse.
Seejärel tuleb kasutada meetodit CryptoJS.enc.Hex.parse, et konverteerida see kuueteistkümnendsüsteemiks, seejärel CryptoJS.enc.Base64.stringify teisendada see Base64 kodeeritud stringiks ning seejärel edastada see CryptoJS.AES.decrypt meetodile dekrüpteerimiseks.
Stringitüübi šifriteksti saamiseks tuleb see esmalt Hex meetodiga parseerida
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Šifriteksti teisendamine Base64 stringideks.
Ainult Base64 tüüpi stringi šifritekst suudab selle dekrüpteerida
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
Base64 kodeeringuks teisendatud stringi saab edasi anda CryptoJS.AES.decrypt meetodile dekrüpteerimise operatsiooniks.
Dekrüpteerimine
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    mode: CryptoJS.mode.ECB,
    täitmine: CryptoJS.pad.Pkcs7
});
Pärast CryptoJS dekrüpteerimist on see endiselt objekt ning selle muutmine lihttekstiks tuleb teisendada stringiks Utf8 formaadis.
Pärast dekrüpteerimist tuleb selgetekstiline string transponeerida Utf8 viisil
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(dekrüpteeritudStr); 'aaaaaaaa'




Siin on AES-i .NET/C# rakenduse lähtekood:







Eelmine:[12306] Vabandust, sest te juhite reisijat liiga tihti, palun proovige homme uuesti
Järgmine:C# rakendab protsessimälu kaardistamise failijagamise mälu
Postitatud 29.05.2018 00:27:20 |
Vaata suure mehe täiustatud lähtekoodi
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com