Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 27517|Antwoord: 1

[Bron] .net/c# CryptoJS aes versleutelde broncode

[Link kopiëren]
Geplaatst op 07-10-2017 17:39:00 | | | |
Onlangs heb ik een inlogfunctie na de simulatie gedaan, het loginwachtwoord is versleuteld door CryptoJS aes, en daarna wil ik het bijbehorende algoritme in C# schrijven
Inleiding tot het AES-encryptie-algoritme:

De Advanced Encryption Standard (afkorting: AES), ook bekend als Rijndael-encryptie in de cryptografie, is een blokencryptiestandaard die door de Amerikaanse federale overheid is aangenomen. Deze standaard wordt gebruikt ter vervanging van de oorspronkelijke DES en is wereldwijd geanalyseerd en veel gebruikt. Na een selectieproces van vijf jaar werd de Advanced Cryptographic Standard gepubliceerd door het National Institute of Standards and Technology (NIST) in FIPS PUB 197 op 26 november 2001, en werd op 26 mei 2002 een geldige standaard. In 2006 werd de Advanced Encryption Standard een van de populairste algoritmen voor symmetrische sleutelcryptografie.

Het js-algoritme is als volgt:



Ik heb online op internet gezocht naar websites voor AES-encryptie, en de resultaten verschillen van mijn eigen encryptie, AES lijkt veel modi te hebben, en ik heb de introducties van anderen via internet gezien


Begin met het voorbereiden van een platte tekst en een sleutel:
var plaintText = 'aaaaaa'; Platte tekst
var keyStr = 'bbbbbbbbbbbbbbbbbb'; Over het algemeen is de sleutel een string  
Volgens de documentatie van de officiële website ondersteunt de AES-methode AES-128, AES-192 en AES-256, en de gebruikte encryptiemethode in het encryptieproces hangt af van het type binnenkomende sleutel, anders wordt deze versleuteld volgens AES-256.
CryptoJS ondersteunt AES-128, AES-192 en AES-256. Hij kiest de variant op basis van de grootte van de sleutel waarin je past. Als je een wachtwoordzin gebruikt, genereert deze een 256-bits sleutel.
Omdat Java wordt gegeven volgens 128bit, maar omdat het een string is, moet het op de frontend worden omgezet naar 128bit.
In eerste instantie dacht ik dat het gebruik van CryptoJS.enc.Hex.parse het correct zou omzetten naar een 128-bits sleutel. Maar verder...
Na vele pogingen moet je de CryptoJS.enc.Utf8.parse-methode gebruiken om de sleutel om te zetten naar 128-bits. Aangezien gezegd wordt dat het meerdere pogingen zijn, is de reden niet bekend, en zal het later dieper worden bestudeerd.
Voordat je de sleutel van het stringtype gebruikt, moet je eerst met uft8 parsen voordat je het kunt gebruiken
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Omdat de backend PKCS5Padding gebruikt, bleek bij gebruik van CryptoJS helemaal geen offset te zijn.
Versleuteling
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    modus: CryptoJS.mode.ECB,
    opvulling: CryptoJS.pad.Pkcs7
});
Aangezien de door CryptoJS gegenereerde ciphertext een object is, als je deze direct omzet naar een string die een Base64-codering is, het attribuut op encryptedData. Ciphertext wordt omgezet in een string in het formaat dat door de backend vereist is.
var encryptedBase64Str = encryptedData.toString();
Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(versleuteldBase64Str);
Je moet ciphertext.toString() lezen op encryptedData om dezelfde ciphertext als Java te krijgen
var encryptedStr = encryptedData.ciphertext.toString();  
Output: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(versleuteldeStr);  
Omdat de versleutelde ciphertext een 128-bits string is, moet deze bij het ontsleutelen worden omgezet naar een Base64-gecodeerd formaat.
Daarna moet je de methode CryptoJS.enc.Hex.parse gebruiken om het om te zetten naar hexadecimaal, en vervolgens CryptoJS.enc.Base64.stringify gebruiken om het om te zetten in een Base64-gecodeerde string, en vervolgens kun je het doorgeven aan de CryptoJS.AES.decrypt-methode om het te ontsleutelen.
Om de ciphertext van het stringtype te krijgen, moet je deze eerst parsen met de Hex-methode
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Converteer ciphertext naar Base64-strings
Alleen Base64-type string ciphertext kan deze ontsleutelen
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
De string die is omgezet naar Base64-codering kan worden doorgegeven aan de CryptoJS.AES.decrypt-methode voor decryptieoperaties.
Decryptie
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    modus: CryptoJS.mode.ECB,
    opvulling: CryptoJS.pad.Pkcs7
});
Na CryptoJS-ontsleuteling is het nog steeds een object, en het omzetten in platte tekst moet worden omgezet naar een string in Utf8-formaat.
Na de ontsleuteling moet de plaintextstring worden getransponeerd op de manier van Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(ontsleuteldeStr); 'aaaaa'




Hier is de broncode voor de .NET/C#-implementatie van AES:







Vorig:[12306] Sorry, omdat u de passagier te vaak bedient, probeer het morgen opnieuw
Volgend:C# implementeert procesgeheugenmapping van bestandsgedeeld geheugen
Geplaatst op 29-05-2018 00:27:20 |
Raadpleeg de geavanceerde broncode van de grote man
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com