Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 27517|Odpowiedź: 1

[Źródło] .net/c# Kod źródłowy szyfrowany w CryptoJS aes

[Skopiuj link]
Opublikowano 07.10.2017 17:39:00 | | | |
Ostatnio użyłem funkcji logowania po symulacji, hasło logowania jest szyfrowane przez CryptoJS aes, a potem chcę napisać odpowiadający mu algorytm w C#
Wprowadzenie do algorytmu szyfrowania AES:

Zaawansowany Standard szyfrowania (skrót: AES), znany również jako szyfrowanie Rijndael w kryptografii, to standard szyfrowania blokowego przyjęty przez rząd federalny USA. Standard ten został użyty jako zastępstwo oryginalnego DES i był analizowany oraz szeroko stosowany na całym świecie. Po pięcioletnim procesie selekcji, Zaawansowany Standard Kryptograficzny został opublikowany przez National Institute of Standards and Technology (NIST) w FIPS PUB 197 w dniu 26 listopada 2001 roku i stał się ważnym standardem 26 maja 2002 roku. W 2006 roku Advanced Encryption Standard stał się jednym z najpopularniejszych algorytmów kryptografii klucza symetrycznego.

Algorytm js wygląda następująco:



Szukałem internetowych stron z szyfrowaniem AES w Internecie i wyniki różnią się od moich własnych zasad – AES wydaje się mieć wiele trybów, a widziałem też inne powody z Internetu


Zacznij od przygotowania tekstu jawnego i klucza:
var plaintText = 'aaaaa'; Tekst jawny
var keyStr = 'bbbbbbbbbbbbbbbb'; Zazwyczaj kluczem jest struna  
Według oficjalnej dokumentacji ze strony internetowej, metoda AES obsługuje AES-128, AES-192 i AES-256, a metoda szyfrowania stosowana w procesie szyfrowania zależy od rodzaju klucza przychodzącego, w przeciwnym razie będzie szyfrowany zgodnie z AES-256.
CryptoJS obsługuje AES-128, AES-192 oraz AES-256. Wybierze wariant na podstawie wielkości klucza, który wprowadzasz. Jeśli użyjesz hasła, wygeneruje on klucz 256-bitowy.
Ponieważ Java jest podana według 128bit, ale jest to ciąg znaków, musi być konwertowany na 128bit na frontendzie.
Na początku myślałem, że użycie CryptoJS.enc.Hex.parse poprawnie przekonwertuje ją na klucz 128-bitowy. Ale poza tym...
Po wielu próbach musisz użyć metody CryptoJS.enc.Utf8.parse, aby przekonwertować klucz na 128-bitowy. Cóż, ponieważ mówi się, że to wielokrotne próby, to powód nie jest znany i zostanie on później bardziej szczegółowo zbadany.
Przed użyciem tonacji typu struny musisz przeanalizować z uft8, zanim będziesz mógł jej użyć
var key = CryptoJS.enc.Utf8.parse(keyStr);  
Ponieważ backend korzysta z PKCS5Padding, ale przy użyciu CryptoJS nie ma żadnego offsetu.
Szyfrowanie
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {  
    tryb: CryptoJS.mode.ECB,
    nadkład: CryptoJS.pad.Pkcs7
});
Ponieważ szyfrogram generowany przez CryptoJS jest obiektem, jeśli przekonwertujesz go bezpośrednio na ciąg zakodowany w Base64, atrybut encryptedData.ciphertext jest konwertowany na ciąg to format wymagany przez backend.
var encryptedBase64Str = encryptedData.toString();
Wyjście: 'RJcecVhTqCHHnlibzTypzuDvG8kjWC+ot8JuxWVdLgY='
console.log(encryptedBase64Str);
Musisz przeczytać ciphertext.toString() na encryptedData, aby uzyskać ten sam szyfrogram co Java
var encryptedStr = encryptedData.ciphertext.toString();  
Wyjście: '44971e715853a821c79e589bcd3ca9cee0ef1bc923582fa8b7c26ec5655d2e06'
console.log(encryptedStr);  
Ponieważ zaszyfrowany tekst jest ciągiem 128 bitów, podczas deszyfrowania musi zostać przekonwertowany do formatu kodowanego w Base64.
Następnie musisz użyć metody CryptoJS.enc.Hex.parse, aby przekonwertować to na szesnastkę, a następnie użyć CryptoJS.enc.Base64.stringify, aby przekonwertować to na ciąg zakodowany w Base64, a następnie możesz przekazać to metodzie CryptoJS.AES.decrypt, aby go odszyfrować.
Aby uzyskać szyfrogram typu ciągu, najpierw trzeba go przeanalizować metodą heksadecimalną
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedStr);
Przekonwertowanie tekstu szyfrowanego na ciągi Base64
Tylko szyfrogram typu Base64 może go odszyfrować
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);  
Ciąg znaków przekonwertowanych na kodowanie Base64 może być przekazany do metody CryptoJS.AES.decrypt do operacji deszyfrowania.
Deszyfrowanie
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {  
    tryb: CryptoJS.mode.ECB,
    nadkład: CryptoJS.pad.Pkcs7
});
Po odszyfrowaniu CryptoJS nadal jest to obiekt, a przekształcenie go w tekst jawny musi zostać przekształcone w ciąg w formacie Utf8.
Po odszyfrowaniu ciąg tekstu jawnego musi zostać przeniesiony w sposób Utf8
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);  
console.log(deszyfrowanyStr); 'aaaaa'




Oto kod źródłowy implementacji AES w .NET/C#:







Poprzedni:[12306] Przepraszam, bo zbyt często obsługujesz pasażera, proszę spróbuj jutro
Następny:C# implementuje mapowanie pamięci plikowej (file share) pamięci
Opublikowano 29.05.2018 00:27:20 |
Sprawdź zaawansowany kod źródłowy tego wielkiego człowieka
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com