Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 27517|Odpověď: 1

[Zdroj] .net/c# CryptoJS aes šifrovaný zdrojový kód

[Kopírovat odkaz]
Zveřejněno 07.10.2017 17:39:00 | | | |
Nedávno jsem použil přihlašovací funkci po simulaci, přihlašovací heslo je zašifrované pomocí CryptoJS aes a pak chci napsat odpovídající algoritmus v C#
Úvod do šifrovacího algoritmu AES:

Pokročilý šifrovací standard (zkratka: AES), známý také jako Rijndaelovo šifrování v kryptografii, je blokový šifrovací standard přijatý federální vládou USA. Tento standard nahrazuje původní DES a byl analyzován a široce používán po celém světě. Po pětiletém výběrovém procesu byl Pokročilý kryptografický standard publikován Národním institutem pro standardy a technologie (NIST) ve FIPS PUB 197 dne 26. listopadu 2001 a stal se platným standardem 26. května 2002. V roce 2006 se Advanced Encryption Standard stal jedním z nejpopulárnějších algoritmů pro kryptografii symetrických klíčů.

Algoritmus js je následující:



Hledal jsem online weby o AES šifrování na internetu a výsledky se liší od mého vlastního šifrování, AES má mnoho režimů a viděl jsem úvody od ostatních lidí z internetu


Začněte přípravou otevřeného textu a klíče:
var plaintText = 'aaaa'; Prostý text
var keyStr = 'bbbbbbbbbbbb'; Obecně je klíčem struna  
Podle oficiální dokumentace na webu metoda AES podporuje AES-128, AES-192 a AES-256 a šifrovací metoda použitá v šifrovacím procesu závisí na typu příchozího klíče, jinak bude šifrován podle AES-256.
CryptoJS podporuje AES-128, AES-192 a AES-256. Varianta si vybere podle velikosti klíče, do kterého vložíte. Pokud použijete heslo, vygeneruje to 256bitový klíč.
Protože Java je zadána podle 128bit, ale protože je to řetězec, musí být na frontendu převedena na 128bit.
Nejprve jsem si myslel, že použití CryptoJS.enc.Hex.parse ji správně převede na 128bitový klíč. Ale jinak...
Po mnoha pokusech je potřeba použít metodu CryptoJS.enc.Utf8.parse k převodu klíče na 128bit. No, protože se říká, že jde o více pokusů, není znám důvod a bude podrobněji zkoumán později.
Před použitím tóniny typu struny je potřeba parsovat s uft8, než ji můžete použít
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Protože backend používá PKCS5Padding, ale při použití CryptoJS se zjistilo, že žádný offset neexistuje.
Šifrování
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    režim: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});
Protože šifrovaný text generovaný CryptoJS je objekt, pokud jej přímo převedete na řetězec kódovaný v Base64, atribut encryptedData.ciphertext se převede na řetězec je formát požadovaný backendem.
var encryptedBase64Str = encryptedData.toString();
Výstup: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(encryptedBase64Str);
Musíte číst ciphertext.toString() na encryptedData, abyste získali stejný šifrovaný text jako Java
var encryptedStr = encryptedData.ciphertext.toString();  
Výstup: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(encryptedStr);  
Protože šifrovaný šifrovaný text je 128bitový řetězec, je nutné jej při dešifrování převést do formátu kódovaného v Base64.
Pak musíte použít metodu CryptoJS.enc.Hex.parse k převodu do hexadecimálního formátu, a pak použít CryptoJS.enc.Base64.stringify k převodu na řetězec kódovaný v Base64, a pak to můžete předat metodě CryptoJS.AES.decrypt k dešifrování.
Pro získání šifrovaného textu typu řetězce je nejprve potřeba jej analyzovat pomocí hexadecimální metody
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Převést šifrovaný text do řetězců Base64
Pouze šifrovaný řetězec typu Base64 jej může dešifrovat
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
Řetězec převedený do kódování v Base64 lze předat do metody CryptoJS.AES.decrypt pro dešifrovací operaci.
Dešifrování
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    režim: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});
Po dešifrování CryptoJS je stále objektem a jeho převod na otevřený text je třeba převést na řetězec ve formátu Utf8.
Po dešifrování je třeba řetězec otevřeného textu převést způsobem Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(decryptedStr); 'aaaaa'




Zde je zdrojový kód implementace AES v .NET/C#:







Předchozí:[12306] Promiňte, protože příliš často obsluhujete cestující, zkuste to prosím zítra znovu
Další:C# implementuje mapování paměť procesů pro sdílení souborů
Zveřejněno 29.05.2018 0:27:20 |
Podívejte se na pokročilý zdrojový kód velkého hráče
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com