|
|
Veröffentlicht am 07.10.2017 17:39:00
|
|
|
|

Kürzlich habe ich eine Login-Funktion nach der Simulation durchgeführt, das Login-Passwort wird von CryptoJS aes verschlüsselt, und dann möchte ich den entsprechenden Algorithmus in C# schreiben. Einführung in den AES-Verschlüsselungsalgorithmus:
Der Advanced Encryption Standard (Abkürzung: AES), auch bekannt als Rijndael-Verschlüsselung in der Kryptographie, ist ein von der US-Bundesregierung eingeführter Blockverschlüsselungsstandard. Dieser Standard wird verwendet, um das ursprüngliche DES zu ersetzen, und wurde weltweit analysiert und weit verbreitet eingesetzt. Nach einem fünfjährigen Auswahlverfahren wurde der Advanced Cryptographic Standard am 26. November 2001 vom National Institute of Standards and Technology (NIST) in FIPS PUB 197 veröffentlicht und wurde am 26. Mai 2002 gültig. Im Jahr 2006 wurde der Advanced Encryption Standard zu einem der beliebtesten Algorithmen für symmetrische Schlüsselkryptographie. Der js-Algorithmus ist wie folgt:
Ich habe online nach AES-Verschlüsselungswebsites im Internet gesucht, und die Ergebnisse unterscheiden sich von meiner eigenen Verschlüsselung, AES scheint viele Modi zu haben, und ich habe die Einführungen anderer Leute aus dem Internet gesehen
Beginnen Sie damit, einen Klartext und einen Schlüssel vorzubereiten: var plaintText = 'aaaaaaa'; Klartext var keyStr = 'bbbbbbbbbbbbbbbb'; Im Allgemeinen ist die Tonart eine Saite Laut der offiziellen Website-Dokumentation unterstützt die AES-Methode AES-128, AES-192 und AES-256, und die im Verschlüsselungsprozess verwendete Verschlüsselungsmethode hängt vom Typ des eingehenden Schlüssels ab, andernfalls wird er gemäß AES-256 verschlüsselt. CryptoJS unterstützt AES-128, AES-192 und AES-256. Es wählt die Variante anhand der Größe des Schlüssels, den du durchgibst. Wenn du eine Passphrase verwendest, erzeugt sie einen 256-Bit-Schlüssel. Da Java nach 128 Bit angegeben ist, aber da es ein String ist, muss es im Frontend in 128 Bit konvertiert werden. Zuerst dachte ich, dass die Verwendung von CryptoJS.enc.Hex.parse es korrekt in einen 128-Bit-Schlüssel umwandeln würde. Aber ansonsten... Nach vielen Versuchen müssen Sie die Methode CryptoJS.enc.Utf8.parse verwenden, um den Schlüssel auf 128-Bit umzuwandeln. Da gesagt wird, es handele sich um mehrere Versuche, ist der Grund nicht bekannt, und es wird später genauer untersucht. Bevor du den Schlüssel des Stringtyps benutzt, musst du mit uft8 parsen, bevor du ihn verwenden kannst var key = CryptoJS.enc.Utf8.parse(keyStr); Da das Backend PKCS5Padding verwendet, stellte sich bei der Verwendung von CryptoJS jedoch heraus, dass es überhaupt keinen Offset gab. Verschlüsselung var encryptedData = CryptoJS.AES.encrypt(plaintText, key, { Modus: CryptoJS.mode.ECB, Padding: CryptoJS.pad.Pkcs7 }); Da der von CryptoJS generierte Ciphertext ein Objekt ist, wenn man ihn direkt in eine Zeichenfolge umwandelt, die von Base64 codiert ist, wird das Attribut auf encryptedData.Ciphertext in eine Zeichenkette umgewandelt, ist das vom Backend geforderte Format. var encryptedBase64Str = encryptedData.toString(); Ausgabe: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY=' console.log(verschlüsseltBase64Str); Man muss ciphertext.toString() auf encryptedData lesen, um denselben Chiffretext wie Java zu erhalten var encryptedStr = encryptedData.ciphertext.toString(); Ausgabe: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06' console.log(verschlüsselteStr); Da der verschlüsselte Chiffretext ein 128-Bit-String ist, muss er beim Entschlüsseln in das Base64-kodierte Format umgewandelt werden. Dann musst du die Methode CryptoJS.enc.Hex.parse verwenden, um es in hexadezimal umzuwandeln, und dann CryptoJS.enc.Base64.stringify verwenden, um es in einen Base64-codierten String umzuwandeln, und dann kannst du es an die Methode CryptoJS.AES.decrypt weiterleiten, um es zu entschlüsseln. Um den Chiffretext des Zeichenkettentyps zu erhalten, muss man ihn zuerst mit der Hex-Methode parsen. var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr); Konvertiere Chiffretext in Base64-Zeichenketten Nur Base64-Typ-String-Ciphertext kann ihn entschlüsseln var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr); Die in Base64-Codierung konvertierte Zeichenkette kann für die Entschlüsselungsoperation in die Methode CryptoJS.AES.decrypt eingegeben werden. Entschlüsselung var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, { Modus: CryptoJS.mode.ECB, Padding: CryptoJS.pad.Pkcs7 }); Nach der Entschlüsselung von CryptoJS ist es immer noch ein Objekt, und die Umwandlung in Klartext muss in eine Zeichenkette im Utf8-Format umgewandelt werden. Nach der Entschlüsselung muss die Klartext-Zeichenkette wie bei Utf8 transponiert werden var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8); console.log(entschlüsseltStr); 'aaaaa'
Hier ist der Quellcode für die .NET/C#-Implementierung von AES:
|
Vorhergehend:[12306] Entschuldigung, weil Sie den Passagier zu oft bedienen, bitte versuchen Sie es morgen nochmalNächster:C# implementiert Prozessspeicher-Mapping Dateifreigabespeicher
|