Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 27517|Atsakyti: 1

[Šaltinis] .net/c# CryptoJS aes užšifruotas šaltinio kodas

[Kopijuoti nuorodą]
Paskelbta 2017-10-07 17:39:00 | | | |
Neseniai atlikau prisijungimo funkciją po modeliavimo, prisijungimo slaptažodį užšifruoja CryptoJS aes, o tada noriu parašyti atitinkamą algoritmą C#
Įvadas į AES šifravimo algoritmą:

Išplėstinis šifravimo standartas (santrumpa: AES), taip pat žinomas kaip Rijndael šifravimas kriptografijoje, yra blokų šifravimo standartas, kurį priėmė JAV federalinė vyriausybė. Šis standartas naudojamas pakeisti originalų DES ir buvo analizuojamas bei plačiai naudojamas visame pasaulyje. Po penkerių metų atrankos proceso Nacionalinis standartų ir technologijų institutas (NIST) paskelbė išplėstinį kriptografinį standartą FIPS PUB 197 2001 m. lapkričio 26 d. ir tapo galiojančiu standartu 2002 m. gegužės 26 d. 2006 m. Išplėstinis šifravimo standartas tapo vienu populiariausių simetrinio rakto kriptografijos algoritmų.

JS algoritmas yra toks:



Aš ieškojau internetinių AES šifravimo svetainių internete, ir rezultatai skiriasi nuo mano šifravimo, AES atrodo, kad turi daug režimų, ir aš mačiau kitų žmonių įvadus iš interneto


Pradėkite nuo paprasto teksto ir rakto paruošimo:
var plaintText = 'aaaa Paprastas tekstas
var keyStr = 'bbbbbbbbbbbb'; Paprastai raktas yra eilutė  
Remiantis oficialia svetainės dokumentacija, AES metodas palaiko AES-128, AES-192 ir AES-256, o šifravimo procese naudojamas šifravimo metodas priklauso nuo gaunamo rakto tipo, kitaip jis bus užšifruotas pagal AES-256.
CryptoJS palaiko AES-128, AES-192 ir AES-256. Jis parinks variantą pagal perduodamo rakto dydį. Jei naudosite slaptafrazę, ji sugeneruos 256 bitų raktą.
Kadangi "Java" suteikiama pagal 128 bitų, bet kadangi tai yra eilutė, ją reikia konvertuoti į 128 bitų priekinėje dalyje.
Iš pradžių maniau, kad naudojant CryptoJS.enc.Hex.parse būtų teisingai konvertuoti jį į 128 bitų raktą. Bet šiaip ...
Po daugelio bandymų turite naudoti CryptoJS.enc.Utf8.parse metodą, kad konvertuotumėte raktą į 128 bitų. Na, o kadangi sakoma, kad tai yra keli bandymai, tada priežastis nežinoma, ir ji bus giliau ištirta vėliau.
Prieš naudodami eilutės tipo raktą, prieš naudodami jį turite išanalizuoti su uft8
var raktas = CryptoJS.enc.Utf8.parse(keyStr);  
Kadangi užpakalinė dalis naudoja PKCS5Padding, tačiau naudojant CryptoJS, buvo nustatyta, kad poslinkio visai nėra.
Šifravimas
var encryptedData = CryptoJS.AES.encrypt(plaintText, raktas, {  
    režimas: CryptoJS.mode.ECB,
    užpildymas: CryptoJS.pad.Pkcs7
});
Kadangi CryptoJS sugeneruotas šifruotas tekstas yra objektas, jei konvertuojate jį tiesiai į eilutę, yra užkoduotas Base64, encryptedData.ciphertext atributas konvertuojamas į eilutę, kurios reikalauja užpakalinė sistema.
var encryptedBase64Str = encryptedData.toString();
Išvestis: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(užšifruotasBase64Str);
Norėdami gauti tą patį šifruotą tekstą, turite perskaityti ciphertext.toString() užšifruotame Data, kad gautumėte tą patį šifruotą tekstą kaip ir Java
var encryptedStr = encryptedData.ciphertext.toString();  
Išvestis: "44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06"
console.log(užšifruotasStr);  
Kadangi užšifruotas šifruotas tekstas yra 128 bitų eilutė, iššifruojant jį reikia konvertuoti į Base64 užkoduotą formatą.
Tada turite naudoti metodą CryptoJS.enc.Hex.parse, kad konvertuotumėte jį į šešioliktainį, tada naudokite CryptoJS.enc.Base64.stringify, kad konvertuotumėte jį į Base64 užkoduotą eilutę, tada galite perduoti jį CryptoJS.AES.decrypt metodui, kad jį iššifruotumėte.
Norėdami gauti eilutės tipo šifruotą tekstą, pirmiausia turite jį išanalizuoti šešiakampiu metodu
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Konvertuoti šifruotą tekstą į Base64 eilutes
Tik Base64 tipo eilutės šifruotas tekstas gali jį iššifruoti
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
Eilutė, konvertuota į Base64 kodavimą, gali būti perduota į CryptoJS.AES.decrypt metodą iššifravimo operacijai.
Iššifravimas
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, raktas, {  
    režimas: CryptoJS.mode.ECB,
    užpildymas: CryptoJS.pad.Pkcs7
});
Po CryptoJS iššifravimo jis vis dar yra objektas, o paverčiant jį paprastu tekstu reikia konvertuoti į eilutę Utf8 formatu.
Po iššifravimo paprasto teksto eilutę reikia perkelti Utf8 būdu
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(decryptedStr); "aaaa




Čia yra AES .NET/C# diegimo šaltinio kodas:







Ankstesnis:[12306] Atsiprašome, nes per dažnai naudojate keleivius, bandykite dar kartą rytoj
Kitą:C# įgyvendina proceso atminties atvaizdavimą failų bendrinimo atmintyje
Paskelbta 2018-05-29 00:27:20 |
Žr. išplėstinį šaltinio kodą didelis vaikinas
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com