Czy jest dostępna biblioteka obsługująca 256-bitowe szyfrowanie AES w JavaScript?
Czy jest dostępna biblioteka obsługująca 256-bitowe szyfrowanie AES w JavaScript?
Odpowiedzi:
JSAES to potężna implementacja AES w JavaScript. http://point-at-infinity.org/jsaes/
Oto strona demonstracyjna, która używa slowAES.
slowAES był łatwy w użyciu. Logicznie zaprojektowane. Rozsądne opakowanie OO. Obsługuje pokrętła i dźwignie, takie jak tryb IV i szyfrowania. Dobra kompatybilność z .NET / C #. Imię jest żartobliwe; nazywa się to „ powolnym AES”, ponieważ nie jest zaimplementowane w C ++. Ale w moich testach nie było to niepraktycznie wolne.
Brakuje trybu EBC. Brakuje również trybu CTR, chociaż myślę, że można by go łatwo zbudować, mając tryb EBC.
Skupia się wyłącznie na szyfrowaniu. Miłym uzupełnieniem klasa robi RFC2898 zgodny ze hasło oparte uzyskiwania klucza, w JavaScripcie, jest dostępny od Anandam . Ta para bibliotek działa dobrze z analogicznymi klasami .NET. Dobra współpraca. Chociaż, w przeciwieństwie do SlowAES, Javascript PBKDF2 jest zauważalnie wolniejszy niż klasa Rfc2898DeriveBytes podczas generowania kluczy.
Nic dziwnego, że technicznie interop jest dobry, ale kluczową kwestią dla mnie był model przyjęty przez SlowAES, który jest znajomy i łatwy w użyciu. Zauważyłem, że niektóre inne biblioteki JavaScript dla AES są trudne do zrozumienia i użycia. Na przykład w niektórych z nich nie mogłem znaleźć miejsca na ustawienie IV lub trybu (CBC, ECB itp.). Nie było tam, gdzie się spodziewałem. SlowAES nie był taki. Nieruchomości były dokładnie tam, gdzie się spodziewałem. Było mi to łatwe, ponieważ znałem modele programowania kryptograficznego Java i .NET.
PBKDF2 Anandama nie było na tym poziomie. Obsługuje tylko jedno wywołanie funkcji DeriveBytes, więc jeśli potrzebujesz wyprowadzić zarówno klucz, jak i IV z hasła, ta biblioteka nie będzie działać bez zmian. Niewielka modyfikacja i działa dobrze w tym celu.
EDYCJA : Złożyłem przykład pakowania SlowAES i zmodyfikowanej wersji PBKDF2 Anandama do składników skryptów systemu Windows. Użycie tego AES z kluczem pochodnym hasła zapewnia dobrą współpracę z klasą .NET RijndaelManaged.
EDIT2 : strona demonstracyjna pokazuje, jak używać tego szyfrowania AES ze strony internetowej. Korzystanie z tych samych danych wejściowych (iv, klawisz, tryb itp.), Które są obsługiwane w .NET, zapewnia dobrą współpracę z klasą Rijndael .NET. Możesz zrobić „wyświetl źródło”, aby pobrać javascript dla tej strony.
EDIT3
późny dodatek: kryptografia JavaScript uznana za szkodliwą. Warto przeczytać.
Podczas moich poszukiwań szyfrowania AES znalazłem to od niektórych studentów ze Standford. Twierdzi, że jest najszybszy. Obsługuje szyfrowanie CCM, OCB, GCM i Block. http://crypto.stanford.edu/sjcl/
Wyszukiwanie w Google „JavaScript AES” znalazło kilka przykładów. Pierwsza, która się pojawiła, ma na celu wyjaśnienie algorytmu, a także rozwiązanie:
Ten post jest już stary, ale crypto-js może być teraz najbardziej kompletną biblioteką szyfrowania javascript.
CryptoJS to zbiór algorytmów kryptograficznych zaimplementowanych w JavaScript. Zawiera następujące szyfry: AES-128, AES-192, AES-256, DES, Triple DES, Rabbit, RC4, RC4Drop i hashers: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3 z 224, 256, 384 lub 512 bitami.
Możesz zajrzeć do ich Przewodnika Szybki start, który jest również odniesieniem do następującego portu node.js.
node-cryptojs-aes jest portem node.js dla crypto-js
Niedawno musiałem wykonać pewną interoperacyjność szyfrowania / deszyfrowania między javascript i python.
Konkretnie...
1) Używanie AES do szyfrowania w javascript i deszyfrowania w pythonie (Google App Engine) 2) Używanie RSA do szyfrowania w javascript i deszyfrowania w pythonie (Google App Engine) 3) Używanie pycrypto
Znalazłem wiele różnych wersji RSA i AES krążących po sieci i wszystkie różniły się podejściem, ale nie znalazłem dobrego przykładu interoperacyjności JavaScript i Python od końca do końca.
W końcu po wielu próbach i błędach udało mi się stworzyć coś, co odpowiadało moim potrzebom.
W każdym razie podałem przykład js / webapp rozmawiającego z serwerem Pythona hostowanym przez silnik aplikacji Google, który używa AES oraz klucza publicznego i klucza prywatnego RSA.
Pomyślałem, że umieściłbym to tutaj za pomocą linku, na wypadek gdyby przydało się to innym, którzy muszą osiągnąć to samo.
http://www.ipowow.com/files/aesrsademo.tar.gz
i zobacz demo na rsa-aes-demo DOT appspot DOT com
edycja: spójrz na wyjście konsoli przeglądarki, a także wyświetl źródło, aby uzyskać wskazówki i przydatne wiadomości dotyczące tego, co się dzieje w wersji demonstracyjnej
edycja: zaktualizowano bardzo stary i nieistniejący link do źródła, na które teraz wskazuje
Sądząc z własnego doświadczenia, asmcrypto.js zapewnia najszybszą implementację AES w JavaScript (szczególnie w Firefoksie, ponieważ może tam w pełni wykorzystać asm.js).
Z pliku readme:
Chrome/31.0 SHA256: 51 MiB/s (9 times faster than SJCL and CryptoJS) AES-CBC: 47 MiB/s (13 times faster than CryptoJS and 20 times faster than SJCL) Firefox/26.0 SHA256: 144 MiB/s (5 times faster than CryptoJS and 20 times faster than SJCL) AES-CBC: 81 MiB/s (3 times faster than CryptoJS and 8 times faster than SJCL)
Edytować: Web Cryptography API jest obecnie realizowany w większości przeglądarek i powinny być wykorzystywane jako podstawowe rozwiązanie, jeśli zależy Ci na wydajności. Należy pamiętać, że IE11 zaimplementował wcześniejszą wersję roboczą standardu, która nie zawierała obietnic.
Kilka przykładów można znaleźć tutaj:
Użyj CryptoJS
Oto kod: https://github.com/odedhb/AES-encrypt
A oto działający przykład online: https://odedhb.github.io/AES-encrypt/
Wypróbuj asmcrypto.js - to naprawdę szybkie.
PS: Jestem autorem i mogę odpowiedzieć na Twoje pytania. Chętnie też otrzymam opinię :)
Pomocna może być biblioteka http://www.movable-type.co.uk/scripts/aes.html .
Jeśli próbujesz użyć javascript, aby uniknąć używania SSL, pomyśl jeszcze raz. Istnieje wiele środków zaradczych, ale tylko SSL zapewnia bezpieczną komunikację. Biblioteki szyfrujące Javascript mogą pomóc w walce z pewnym zestawem ataków, ale nie są prawdziwym atakiem typu man-in-the-middle.
Jeśli szukasz SSL dla wyszukiwarki aplikacji Google w domenie niestandardowej, zajrzyj na wwwizer.com .
Poniższy post wyjaśnia, jak stworzyć próbę bezpiecznej komunikacji za pomocą javascript i jak to zrobić źle: Użyj modułu szyfrowania JavaScript zamiast SSL / HTTPS
Istnieje również bezpłatna biblioteka Stanford jako alternatywa dla Cryptojs
Inne rozwiązanie z obsługą AES-256: https://github.com/digitalbazaar/forge
Oto jedyne rozwiązanie, które u mnie zadziałało:
http://www.hanewin.net/encrypt/aes/aes.htm
Jest dość prosty, ale prosty w użyciu i wydaje się działać dobrze.