Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 27517|Risposta: 1

[Fonte] .net/c# Codice sorgente criptato CryptoJS aes

[Copiato link]
Pubblicato su 07/10/2017 17:39:00 | | | |
Recentemente ho fatto una funzione di login dopo la simulazione, la password di accesso è criptata da CryptoJS aes, e poi voglio scrivere l'algoritmo corrispondente in C#
Introduzione all'algoritmo di crittografia AES:

Advanced Encryption Standard (abbreviazione: AES), noto anche come crittografia di Rijndael, è uno standard di crittografia a blocchi adottato dal governo federale degli Stati Uniti. Questo standard viene utilizzato per sostituire il DES originale ed è stato analizzato e ampiamente utilizzato in tutto il mondo. Dopo un processo di selezione di cinque anni, lo Standard Crittografico Avanzato è stato pubblicato dal National Institute of Standards and Technology (NIST) in FIPS PUB 197 il 26 novembre 2001, ed è diventato uno standard valido il 26 maggio 2002. Nel 2006, l'Advanced Encryption Standard è diventato uno degli algoritmi più popolari per la crittografia a chiave simmetrica.

L'algoritmo js è il seguente:



Ho cercato siti web di crittografia AES online su Internet, e i risultati sono diversi dalla mia, AES sembra avere molte modalità e ho visto le presentazioni di altre persone su Internet


Inizia preparando un testo in chiaro e una chiavi:
var plaintText = 'aa'; Testo semplice
var keyStr = 'bbbbbbbbbbbbbbbb'; Generalmente, la chiave è una stringa  
Secondo la documentazione ufficiale del sito web, il metodo AES supporta AES-128, AES-192 e AES-256, e il metodo di crittografia utilizzato nel processo dipende dal tipo di chiave in arrivo, altrimenti verrà criptato secondo AES-256.
CryptoJS supporta AES-128, AES-192 e AES-256. Sceglierà la variante in base alla dimensione della chiave che si passa. Se usi una passphrase, allora genererà una chiave a 256 bit.
Poiché Java è data secondo 128bit, ma essendo una stringa, deve essere convertita in 128bit sul frontend.
All'inizio pensavo che usare CryptoJS.enc.Hex.parse lo avrebbe convertito correttamente in una chiave a 128 bit. Ma per il resto...
Dopo molti tentativi, devi usare il metodo CryptoJS.enc.Utf8.parse per convertire la chiave a 128 bit. Beh, dato che si dice che siano multipli tentativi, la ragione non è nota e verrà studiata più a fondo in seguito.
Prima di usare la tonalità del tipo di stringa, devi parizzare con uft8 prima di poterla usare
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Poiché il backend utilizza PKCS5Padding, ma usando CryptoJS, si è riscontrato che non c'era alcun offset.
Crittografia
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    mode: CryptoJS.mode.ECB,
    riempimento: CryptoJS.pad.Pkcs7
});
Poiché il testo cifrato generato da CryptoJS è un oggetto, se lo converti direttamente in una stringa codificata in Base64, l'attributo su encryptedData.ciphertext viene convertito in una stringa è il formato richiesto dal backend.
var encryptedBase64Str = encryptedData.toString();
Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(criptatoBase64Str);
Devi leggere cifrato.toString() su encryptedData per ottenere lo stesso testo cifrato di Java
var encryptedStr = encryptedData.ciphertext.toString();  
Output: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(Str criptata);  
Poiché il testo cifrato è una stringa di 128 bit, deve essere convertito in formato codificato Base64 durante la decifrazione.
Poi devi usare il metodo CryptoJS.enc.Hex.parse per convertirlo in esadecimale, e poi usare CryptoJS.enc.Base64.stringify per convertirlo in una stringa codificata in Base64, e poi puoi passarlo al metodo CryptoJS.AES.decrypt per decifrarlo.
Per ottenere il testo cifrato del tipo di stringa, devi prima analizzarlo con il metodo Hex
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Converti testo cifrato in stringhe Base64
Solo il testo cifrato a stringhe di tipo Base64 può decifrarlo
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
La stringa convertita in codifica Base64 può essere passata nel metodo CryptoJS.AES.decrypt per l'operazione di decrittazione.
Decrittazione
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    mode: CryptoJS.mode.ECB,
    riempimento: CryptoJS.pad.Pkcs7
});
Dopo la decrittazione CryptoJS, resta comunque un oggetto, e trasformarlo in testo in chiaro deve essere convertito in una stringa in formato Utf8.
Dopo la decrittazione, la stringa di testo in chiaro deve essere trasposta nello stile di Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(decriptatoStr); 'aa'




Ecco il codice sorgente per l'implementazione .NET/C# di AES:







Precedente:[12306] Scusa, perché gestisci troppo spesso il passeggero, per favore riprova domani
Prossimo:C# implementa la mappatura della memoria di processo per la condivisione file
Pubblicato su 29/05/2018 00:27:20 |
Fai riferimento al codice sorgente avanzato del gigante
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com