Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 27517|Răspunde: 1

[Sursă] .net/c# Cod sursă criptat CryptoJS aes

[Copiază linkul]
Postat pe 07.10.2017 17:39:00 | | | |
Recent, am făcut o funcție de autentificare post-simulare, parola de autentificare este criptată de CryptoJS aes, iar apoi vreau să scriu algoritmul corespunzător în C#
Introducere în algoritmul de criptare AES:

Standardul Avansat de Criptare (abreviere: AES), cunoscut și sub denumirea de criptare Rijndael în criptografie, este un standard de criptare pe blocuri adoptat de guvernul federal al SUA. Acest standard este folosit pentru a înlocui DES original și a fost analizat și utilizat pe scară largă în întreaga lume. După un proces de selecție de cinci ani, Standardul Criptografic Avansat a fost publicat de Institutul Național de Standarde și Tehnologie (NIST) în FIPS PUB 197 la 26 noiembrie 2001 și a devenit un standard valabil la 26 mai 2002. În 2006, Advanced Encryption Standard a devenit unul dintre cei mai populari algoritmi pentru criptografia cu chei simetrice.

Algoritmul js este următorul:



Am căutat site-uri online de criptare AES pe Internet, iar rezultatele sunt diferite față de criptarea mea, AES pare să aibă multe moduri și am văzut prezentări ale altor persoane pe Internet


Începe prin a pregăti un text clar și o cheie:
var plaintText = 'aa'; Text simplu
var keyStr = 'bbbbbbbbbbbbbb'; În general, cheia este un șir  
Conform documentației site-ului oficial, metoda AES suportă AES-128, AES-192 și AES-256, iar metoda de criptare folosită în procesul de criptare depinde de tipul cheii primite, altfel va fi criptată conform AES-256.
CryptoJS suportă AES-128, AES-192 și AES-256. Va alege varianta după mărimea cheii pe care o treci. Dacă folosești o parolă, atunci va genera o cheie de 256 de biți.
Deoarece Java este dat conform 128bitului, dar fiind un șir, trebuie convertit în 128bit pe frontend.
La început, am crezut că folosirea CryptoJS.enc.Hex.parse o va converti corect într-o cheie de 128 de biți. Dar în rest...
După mai multe încercări, trebuie să folosești metoda CryptoJS.enc.Utf8.parse pentru a converti cheia la 128 de biți. Ei bine, deoarece se spune că sunt mai multe încercări, motivul nu este cunoscut și va fi studiat mai în profunzime mai târziu.
Înainte de a folosi tonalitatea tipului de șir, trebuie să parsezi cu uft8 înainte să o poți folosi
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Deoarece backend-ul folosește PKCS5Padding, când folosești CryptoJS, s-a constatat că nu există deloc offset.
Criptare
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    mod: CryptoJS.mode.ECB,
    umplutură: CryptoJS.pad.Pkcs7
});
Deoarece textul cifrat generat de CryptoJS este un obiect, dacă îl converti direct într-un șir codificat în Base64, atributul de pe encryptedData.ciphertext este convertit într-un șir, este formatul cerut de backend.
var encryptedBase64Str = encryptedData.toString();
Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(encryptedBase64Str);
Trebuie să citești ciphertext.toString() pe encryptedData pentru a obține același text cifrat ca Java
var encryptedStr = encryptedData.ciphertext.toString();  
Ieșire: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(Str criptat);  
Deoarece textul cifrat este un șir de 128 de biți, trebuie convertit în format codificat Base64 la decriptare.
Apoi trebuie să folosești metoda CryptoJS.enc.Hex.parse pentru a-l converti în hexazecimal, apoi să folosești CryptoJS.enc.Base64.stringify pentru a-l converti într-un șir codificat Base64, iar apoi poți să o transferi metodei CryptoJS.AES.decrypt pentru a-l decripta.
Pentru a obține textul cifrat al tipului de șir, trebuie mai întâi să-l analizezi cu metoda Hex
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Convertiți textul cifrat în șiruri Base64
Doar textul cifrat de tip Base64 îl poate decripta
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
Șirul convertit în codare Base64 poate fi transmis în metoda CryptoJS.AES.decrypt pentru operațiuni de decriptare.
Decriptare
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    mod: CryptoJS.mode.ECB,
    umplutură: CryptoJS.pad.Pkcs7
});
După decriptarea CryptoJS, acesta rămâne un obiect, iar transformarea lui în text clar trebuie convertită într-un șir în format Utf8.
După decriptare, șirul de text clar trebuie transpus în stilul Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(decriptatStr); 'aa'




Iată codul sursă pentru implementarea .NET/C# a AES:







Precedent:[12306] Scuze, pentru că conduci pasagerul prea des, te rog încearcă din nou mâine
Următor:C# implementează maparea memoriei procesului pentru partajarea fișierelor
Postat pe 29.05.2018 00:27:20 |
Consultă codul sursă avansat al celor mari
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com