Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 27517|Odpoveď: 1

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

[Kopírovať odkaz]
Zverejnené 7. 10. 2017 17:39:00 | | | |
Nedávno som použil prihlasovaciu funkciu po simulácii, prihlasovacie heslo je zašifrované pomocou CryptoJS aes a potom chcem napísať príslušný algoritmus v C#
Úvod do algoritmu šifrovania AES:

Pokročilý šifrovací štandard (skratka: AES), známy aj ako Rijndael šifrovanie v kryptografii, je blokový šifrovací štandard prijatý federálnou vládou USA. Tento štandard sa používa na nahradenie pôvodného DES a bol analyzovaný a široko používaný po celom svete. Po päťročnom výberovom procese bol Pokročilý kryptografický štandard publikovaný Národným inštitútom štandardov a technológií (NIST) vo FIPS PUB 197 dňa 26. novembra 2001 a stal sa platným štandardom 26. mája 2002. V roku 2006 sa Advanced Encryption Standard stal jedným z najpopulárnejších algoritmov pre kryptografiu symetrických kľúčov.

Algoritmus js je nasledovný:



Hľadal som online stránky o AES šifrovaní na internete a výsledky sa líšia od môjho vlastného šifrovania, AES má zrejme mnoho režimov a videl som úvody od iných ľudí z internetu


Začnite prípravou otvoreného textu a kľúča:
var plaintText = 'aaaaa'; Neobyčajný text
var keyStr = 'bbbbbbbbbbbbbbbb'; Všeobecne je tónina struna  
Podľa oficiálnej webovej dokumentácie metóda AES podporuje AES-128, AES-192 a AES-256 a šifrovacia metóda použitá v šifrovacom procese závisí od typu prichádzajúceho kľúča, inak bude šifrovaný podľa AES-256.
CryptoJS podporuje AES-128, AES-192 a AES-256. Variant vyberie podľa veľkosti kľúča, ktorý vložíte. Ak použijete heslo, vygeneruje 256-bitový kľúč.
Keďže Java je zadaná podľa 128bitu, ale keďže je to reťazec, musí sa na frontende konvertovať na 128bit.
Najprv som si myslel, že použitie CryptoJS.enc.Hex.parse to správne prevedie na 128-bitový kľúč. Ale inak...
Po mnohých pokusoch je potrebné použiť metódu CryptoJS.enc.Utf8.parse na konverziu kľúča na 128-bit. No, keďže sa hovorí, že ide o viacero pokusov, dôvod nie je známy a bude podrobnejšie skúmaný neskôr.
Pred použitím kľúča daného typu struny je potrebné najskôr analyzovať s uft8, než ho môžete použiť
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Keďže backend používa PKCS5Padding, ale pri použití CryptoJS sa zistilo, že nedochádza k žiadnemu offsetu.
Šifrovanie
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    režim: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});
Keďže šifrovaný text generovaný CryptoJS je objekt, ak ho konvertujete priamo na reťazec kódovaný v Base64, atribút na encryptedData.ciphertext sa konvertuje na reťazec je formát požadovaný backendom.
var encryptedBase64Str = encryptedData.toString();
Výstup: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(encryptedBase64Str);
Musíš čítať ciphertext.toString() na encryptedData, aby si získal rovnaký šifrovaný text ako v Jave
var encryptedStr = encryptedData.ciphertext.toString();  
Výstup: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(encryptedStr);  
Keďže šifrovaný šifrovaný text je 128-bitový reťazec, je potrebné ho pri dešifrovaní previesť do formátu kódovaného v Base64.
Potom musíte použiť metódu CryptoJS.enc.Hex.parse na konverziu do hexadecimalnej formy, potom použiť CryptoJS.enc.Base64.stringify na prevod do reťazca kódovaného v Base64, a potom to môžete odovzdať metóde CryptoJS.AES.decrypt na dešifrovanie.
Aby ste získali šifrovaný text typu reťazca, musíte ho najskôr analyzovať pomocou hexadecimalnej metódy
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Konverzia šifrovaného textu do Base64 reťazcov
Dešifrovať ho dokáže dešifrovať iba šifrový text typu Base64
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
Reťazec prevedený do kódovania Base64 môže byť odoslaný do metódy CryptoJS.AES.decrypt na dešifrovaciu operáciu.
Dešifrovanie
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    režim: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7
});
Po dešifrovaní CryptoJS je stále objektom a jeho premena na čistý text je potrebné previesť na reťazec vo formáte Utf8.
Po dešifrovaní je potrebné prasiatku otvoreného textu preniesť spôsobom Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(decryptedStr); 'aaaaa'




Tu je zdrojový kód implementácie AES v .NET/C#:







Predchádzajúci:[12306] Prepáčte, pretože príliš často obsluhujete pasažier, skúste to znova zajtra
Budúci:C# implementuje mapovanie pamäťe procesov, zdieľaná pamäť súborov
Zverejnené 29. 5. 2018 0:27:20 |
Pozrite si pokročilý zdrojový kód veľkého hráča
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com