Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 27517|Svar: 1

[Källa] .net/c# CryptoJS aes-krypterad källkod

[Kopiera länk]
Publicerad på 2017-10-07 17:39:00 | | | |
Nyligen gjorde jag en inloggningsfunktion efter simulering, inloggningslösenordet krypteras av CryptoJS aes, och sedan vill jag skriva motsvarande algoritm i C#
Introduktion till AES-krypteringsalgoritmen:

Advanced Encryption Standard (förkortning: AES), även känd som Rijndael-kryptering inom kryptografi, är en blockkrypteringsstandard som antagits av den amerikanska federala regeringen. Denna standard används för att ersätta den ursprungliga DES och har analyserats och använts i stor utsträckning över hela världen. Efter en femårig urvalsprocess publicerades Advanced Cryptographic Standard av National Institute of Standards and Technology (NIST) i FIPS PUB 197 den 26 november 2001 och blev en giltig standard den 26 maj 2002. År 2006 blev Advanced Encryption Standard en av de mest populära algoritmerna för symmetrisk nyckelkryptografi.

Js-algoritmen är som följer:



Jag sökte efter online-webbplatser för AES-kryptering på internet, och resultaten skiljer sig från min egen kryptering, AES verkar ha många lägen, och jag har sett andras introduktioner från internet


Börja med att förbereda en klartext och nyckel:
var plaintText = 'aaaaa'; Klartext
var keyStr = 'bbbbbbbbbbbbbbbb'; Generellt är nyckeln en sträng  
Enligt den officiella webbplatsens dokumentation stöder AES-metoden AES-128, AES-192 och AES-256, och krypteringsmetoden som används i krypteringsprocessen beror på vilken typ av inkommande nyckel den har, annars kommer den att krypteras enligt AES-256.
CryptoJS stöder AES-128, AES-192 och AES-256. Den väljer varianten utifrån storleken på nyckeln du passerar i. Om du använder en lösenfras kommer den att generera en 256-bitars nyckel.
Eftersom Java ges enligt 128-bitar, men eftersom det är en sträng, måste det konverteras till 128-bitars i frontend.
Först trodde jag att CryptoJS.enc.Hex.parse skulle konvertera den korrekt till en 128-bitars nyckel. Men annars...
Efter många försök behöver du använda metoden CryptoJS.enc.Utf8.parse för att konvertera nyckeln till 128-bitars. Eftersom det sägs att det är flera försök, är orsaken inte känd, och det kommer att studeras mer ingående senare.
Innan du använder nyckeln för strängtypen måste du parsa med uft8 innan du kan använda den
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Eftersom backend använder PKCS5Padding, men när man använde CryptoJS, upptäcktes det att det inte fanns någon offset alls.
Kryptering
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    läge: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});
Eftersom chiffertexten som genereras av CryptoJS är ett objekt, om du konverterar den direkt till en sträng som är en Base64-kodad, är attributet på encryptedData. Chiffertext konverteras till en sträng är det format som krävs av backend.
var encryptedBase64Str = encryptedData.toString();
Output: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(krypteradBase64Str);
Du måste läsa ciphertext.toString() på encryptedData för att få samma chiffertext som Java
var encryptedStr = encryptedData.ciphertext.toString();  
Utdata: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(krypteradStr);  
Eftersom den krypterade chiffertexten är en 128-bitars sträng måste den konverteras till Base64-kodat format vid dekryptering.
Sedan behöver du använda metoden CryptoJS.enc.Hex.parse för att konvertera det till hexadecimal, och sedan använda CryptoJS.enc.Base64.stringify för att konvertera det till en Base64-kodad sträng, och sedan kan du skicka det till CryptoJS.AES.decrypt-metoden för att dekryptera det.
För att få chiffertexten för strängtypen måste du först tolka den med Hex-metoden
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Konvertera chiffertext till Base64-strängar
Endast Base64-typ strängchiffertext kan dekryptera den
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
Strängen som konverterats till Base64-kodning kan skickas in i CryptoJS.AES.decrypt-metoden för dekrypteringsoperation.
Dekryptering
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    läge: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});
Efter CryptoJS-dekryptering är det fortfarande ett objekt, och att omvandla det till klartext måste konverteras till en sträng i Utf8-format.
Efter dekryptering måste klartextsträngen transponeras på samma sätt som Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(dekrypteradStr); 'aaaaa'




Här är källkoden för .NET/C#-implementeringen av AES:







Föregående:[12306] Förlåt, för att du kör passageraren för ofta, försök igen imorgon
Nästa:C# implementerar processminnesmappning på fildelningsminne
Publicerad på 2018-05-29 00:27:20 |
Se den avancerade källkoden för den stora killen
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com