Czy jest dostępna biblioteka do szyfrowania AES 256-bitowego w JavaScript?JavaScript AES encryption
Odpowiedz
JSAES to potężna implementacja AES w JavaScript. http://point-at-infinity.org/jsaes/
JSAES jest objęty licencją GNU GPL - w związku z tym nie nadaje się do niektórych projektów. – Robert
Jak mogę określić "tryb pracy" i IV? Nie wygląda na to, że to opcja. –
To jest teraz bardzo przydatne i bogate w funkcje http://code.google.com/p/crypto-js/ –
Googling "JavaScript AES" znalazł kilka przykładów. Pierwszy z nich, który pojawił się przeznaczony jest do wyjaśnienia algorytmu jak również dostarczenie rozwiązania:
Nie mogłem wymyślić, jak ustawić IV w tej bibliotece. Również nie jest bardzo OO. – Cheeso
Odpowiednikiem IV w trybie licznika jest jednorazowość. Ta implementacja została przeformułowana tak, aby była bardziej OO. Obejmuje on tylko tryb licznika (CTR). – ChrisV
To działa całkiem dobrze, z tym że nie ma żadnego trybu EBC. – CpnCrunch
http://www.movable-type.co.uk/scripts/aes.html biblioteka może być pomocne.
Oto a demonstration page używający slowAES.
slowAES był łatwy w użyciu. Logicznie zaprojektowany. Rozsądne opakowanie OO. Obsługuje pokrętła i dźwignie, takie jak tryb IV i szyfrowania. Dobra kompatybilność z .NET/C#. Ta nazwa to język w policzek; nazywa się "powolny AES", ponieważ nie jest zaimplementowany w C++. Ale w moich testach nie było to niepraktycznie powolne.
Brakuje trybu EBC. Brakuje również trybu CTR, chociaż można go łatwo zbudować w trybie ECB, jak sądzę.
Skupia się wyłącznie na szyfrowaniu. Ładną klasą komplementarną, która obsługuje RFC2898 - oparte na haseł bazowanie na kluczach, w języku Javascript jest available from Anandam. Ta para bibliotek działa dobrze z analogicznymi klasami .NET. Dobry współzawodnictwo. Chociaż w przeciwieństwie do SlowAES, JavaScript PBKDF2 jest zauważalnie wolniejszy niż klasa Rfc2898DeriveBytes podczas generowania kluczy.
Nie jest zaskakujące, że pod względem technicznym istnieje dobra współpraca, ale kluczowym punktem był dla mnie 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.). Rzeczy nie były tam, gdzie się ich spodziewałem. SlowAES nie był taki. Właściwości były dokładnie tam, gdzie oczekiwałem. Łatwo było mi to odebrać, znając modele programowania kryptograficznego Java i .NET.
Anandam PBKDF2 nie był na tym poziomie. Obsługiwano tylko jedno wywołanie funkcji DeriveBytes, więc jeśli musisz uzyskać zarówno klucz, jak i IV z hasła, biblioteka ta nie będzie działać, bez zmian. Trochę drobnych modyfikacji i działa dobrze w tym celu.
EDIT: ułożyła an example opakowań SlowAES i zmodyfikowanej wersji Anandam na PBKDF2 na składniki skryptów Windows. Używanie tej AES z kluczem pochodnym od hasła pokazuje dobre współdziałanie z klasą .NET RijndaelManaged.
EDIT2: the demo page pokazuje, jak korzystać z tego szyfrowania AES ze strony internetowej. Używanie tych samych wejść (iv, klucz, tryb itp.) Obsługiwanych w .NET zapewnia dobre współdziałanie z klasą .NET Rijndael. Możesz zrobić "źródło widoku", aby uzyskać javascript dla tej strony.
Edit3
późny dodatek: Javascript Cryptography considered harmful. Warto przeczytać.
+1 dla [Kryptografia JavaScript uważana za szkodliwą] (http://www.matasano.com/articles/javascript-cryptography/) –
Widzę jedną prawidłową aplikację - HTML5, w której wszystkie pliki są przechowywane lokalnie. Jeśli lokalne pliki mogą zostać przejęte, to w każdym razie skazane na porażkę ;-). – Nux
o linku edit3, jest to kawał bzdura artykułu ... połowa jego oświadczeń jest całkowicie fałszywa! – momomo
W moich poszukiwaniach szyfrowania AES znalazłem to od niektórych studentów Standford. Roszczenia są najszybsze.Obsługuje CCM, OCB, GCM i szyfrowanie blokowe. http://crypto.stanford.edu/sjcl/
, o czym mówię! – momomo
Brakuje dokumentacji i jest ona trudna w użyciu. Jak zmienić kluczową długość? Zacząłem polować po dokumentach i nie mogłem tego rozgryźć w rozsądnym czasie. Również podczas szyfrowania zwracana jest tablica par klucz-wartość, ale dokumenty nie wydają się tego wyjaśniać. Skończyło się na używaniu biblioteki ruchomych typów. – CpnCrunch
A to nie jest tak asynchroniczne, więc jeśli szyfrujesz lub odszyfrowujesz dłuższy ciąg, na przykład z AES-CBC, to blokuje interfejs użytkownika – rsz
Niedawno miałem potrzebę wykonania pewnej interoperacyjności szyfrowania/deszyfrowania między javascript i python.
Konkretnie ...
1) Za pomocą AES do szyfrowania i deszyfrowania w javascript w python (Google App Engine) 2) Za pomocą RSA do szyfrowania i deszyfrowania w javascript w python (Google App Engine) 3) Używając pycrypto
Znalazłem wiele różnych wersji RSA i AES pływających po Internecie i były one różne w ich podejściu, ale nie znalazłem dobry przykład końcowej współpracy javascript i Pythona.
Ostatecznie udało mi się spleść coś, co pasowało do moich potrzeb po wielu próbach i błędach.
W każdym razie zapukałem do przykładu js/webapp rozmawiającego z serwerem Pythona hostowanego w wyszukiwarce Google, który używa AES i klucza publicznego oraz klucza prywatnego RSA.
Chyba bym ją tutaj zamieścił linkiem na wypadek, gdyby był przydatny dla innych, którzy muszą wykonać to samo.
http://www.ipowow.com/files/aesrsademo.tar.gz
i zobaczyć demo w RSA-AES-demo DOT appspot DOT com
edit: patrzeć na wyjściu konsoli przeglądarka, a także przeglądać źródła, aby uzyskać pewne wskazówki i użyteczne wiadomości co do tego, co jest dzieje się w demo
edycji: updated bardzo stary i nieistniejącego link do tej pory źródła wskazują
Dziękuję WAM bardzo za to! Nie mogłem do końca życia dostać moje javascriptowe aes do rozmowy z moimi python. – Spike
Próbowałem całą noc (z pycrypto i innymi), aby zrobić to, co pomógł mi mój kod w ciągu 10 minut. Dziękuję bardzo! –
Bez względu na przyczynę, RSA działa łatwo, ale AES jest królewskim bólem.Dziękuję Ci za to!!! – speedplane
Jeśli próbujesz użyć javascript, aby uniknąć przy użyciu protokołu SSL, pomyśl jeszcze raz. Istnieje wiele metod połowicznych, ale SSL zapewnia bezpieczną komunikację. Biblioteki szyfrowania JavaScript mogą pomóc w pewnym zestawie ataków, ale nie w prawdziwym ataku man-in-the-middle.
Jeśli szukasz SSL dla silnika aplikacji Google w niestandardowej domenie, spójrz na numer wwwizer.com.
Poniższy post wyjaśnia, jak tworzyć próba bezpieczną komunikację z javascript i jak się to źle: Use JavaScript encryption module instead of SSL/HTTPS
Nie wiem, dlaczego zostało to odrzucone do zapomnienia, ponieważ jest to bardzo dobry punkt, że każdy, kto myśli o implementacji szyfrowania javascript, musi przynajmniej rozważyć. Rewizja. – Jules
Korzystanie z szyfrowania po stronie klienta w celu uniknięcia SSL to stary punkt, który niektórzy ludzie twierdzą, że się temu sprzeciwia: w rzeczywistości może dodać ochronę do HTTPS, uniknąć ataków pasywnych lub być wykorzystywany w pobranych aplikacjach i rozszerzeniach przeglądarki. Właśnie zobaczyłem, że kiedyś został użyty nieprawidłowo (moja szkoła, ale już to naprawili) i wielokrotnie używano go poprawnie (na przykład kryptokat). –
Ten post jest stary, ale crypto-js, może być teraz najbardziej kompletny javascript biblioteki szyfrowania.
CryptoJS to zbiór algorytmów kryptograficznych zaimplementowanych w JavaScript. Zawiera następujące szyfry: AES-128, AES-192, AES-256, DES, potrójny DES, Królik, RC4, RC4Drop i przetyczki: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA-3 z 224, 256, 384 lub 512 bitami.
Możesz zajrzeć do ich Quick-start Guide, która jest również odniesieniem dla następującego portu node.js.
node-cryptojs-aes jest node.js port crypto-js
Niestety brakuje dokumentacji. Wydaje się, że tylko przewodnik "szybkiego startu". Gdzie jest pełna dokumentacja? Mówi, że obsługuje wiele kluczy długości, ale nie ma dokumentacji, jak to zrobić. – CpnCrunch
@CpnCrunch: pełny dokument API nie jest online, ale kod jako pełne komentarze do javadoc API. I możesz go wygenerować. Przeczytaj komentarze na temat [źródło kodu cipher-core.js] (http://code.google.com/p/crypto-js/source/browse/tags/3.1.2/src/cipher-core.js) znajdziesz szyfr rozmiar klucza i rozmiar IV szyfru. – marcz
Dziwne, kiedy szyfruję i odszyfrowuję z powrotem, teksty są różne – OMGPOP
Istnieje również Stanford wolne lib alternatywę Cryptojs
innego rozwiązania w/AES 256 obsługi: https://github.com/digitalbazaar/forge
Oto jedyne rozwiązanie, które zadziałało:
http://www.hanewin.net/encrypt/aes/aes.htm
Jest to dość proste, ale proste w użyciu i wydaje się działać dobrze.
Jak właściwie wywołujesz funkcję szyfrowania i odszyfrowywania? – guest176969
https://www.hanewin.net/encrypt/aes/aes-test.htm – CpnCrunch
Sądząc po własnym doświadczeniu, asmcrypto.js zapewnia najszybszą implementację AES w JavaScript (szczególnie w Firefoksie, ponieważ może w pełni wykorzystać tam asm.js).
Od 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)
Edit:Web Cryptography API jest teraz implemented in most browsers 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 wykorzystywała obietnic.
Niektóre przykłady można znaleźć tutaj:
Dostaję około 8 MiB/s z CryptoJS. Ciekawe, jak by to się udało. – Lodewijk
Spróbuj asmcrypto.js - to naprawdę szybko.
PS: Jestem autorem i mogę odpowiedzieć na wszelkie pytania. Również byłbym zadowolony, aby uzyskać pewne informacje zwrotne :)
asmcrypto.js jest ładne, ale na IE10 nie działa dobrze. zawiesza się w przeglądarce na więcej niż 1 minutę lub przynajmniej 45 sekund. Poza tym nie rozumiem, dlaczego musisz zastąpić funkcję globalnej matematyki? jest wiele bibliotek, które używają tego. – decho
Czy możesz skomentować, że masz pewność, że działa poprawnie? IOW: Skąd wiesz, że właściwie zaimplementowałeś AES? – Lodewijk
Wydajność IE10 jest niska, ponieważ nie optymalizuje ona w ogóle asm.js. Ma też trochę inne wzory JIT. Sprawienie, by kod działał dobrze w IE, powoduje również jego zasysanie w Chrome i FF. Załóżmy, że mam właściwy wybór. Odnośnie do _Math.random_ była długa dyskusja (https://github.com/vibornoff/asmcrypto.js/issues/27). Krótko mówiąc, ta potrzeba zapobiegania wyciekowi surowego _Math.random_ (co teoretycznie może pogarszać bezpieczeństwo PRNG). – vibornoff
Używaj CryptoJS
Oto kod: https://github.com/odedhb/AES-encrypt
A oto przykład pracuje w trybie online: https://odedhb.github.io/AES-encrypt/
najlepsza odpowiedź – user1735921
- 1. C++ AES Encryption Class
- 2. AES (aes-ige-128, aes-ige-192, aes-ige-256) szyfrowanie/deszyfrowanie z openssl C
- 3. Java simple encryption
- 4. Core Data Encryption
- 5. WinRT SQLite Encryption
- 6. AES (aes-cbc-128, aes-cbc-192, aes-cbc-256) szyfrowanie/deszyfrowanie z openssl C
- 7. Generowanie tabel wyszukiwania AES (AES-256)
- 8. Czy to szyfrowanie AES jest wystarczająco bezpieczne?
- 9. AES-256 i PKCS7Padding nie powiedzie się w Javie
- 10. AES, aby powrócić alfanumerycznych
- 11. Gdzie przechowywać klucz AES?
- 12. Java AES CBC Rozszyfrowanie
- 13. Wewnętrzne elementy AES-NI są domyślnie włączone?
- 14. W obliczu wycieków pamięci w metodzie szyfrowania AES
- 15. PKCS # 11 Wygeneruj klucz AES
- 16. Zmienne lokalne w ramach AES
- 17. Java Cipher - AES Padding Problem
- 18. Szukanie zaszyfrowanego wejścia AES-CTR
- 19. niepoprawny błąd długości klucza AES
- 20. Jak bezpieczne jest AES-128?
- 21. Szyfrowanie i odszyfrowywanie wartości kwerendy przy użyciu AES 256
- 22. SQL Server 2008 R2 Encryption - z Entity Framework
- 23. Jak korzystać z pomostu z szyfrowaniem Let's Encryption?
- 24. Czy mogę wykorzystać GPU do szyfrowania AES z .NET? Jeśli tak to jak?
- 25. Szyfrowanie i deszyfrowanie AES Java z statycznym sekretem
- 26. Szyfrowanie/deszyfrowanie AES między Ruby-OpenSSL, PyCrypto
- 27. Szyfrowanie AES 256 w .NET Framework 2.0
- 28. Szyfrowanie AES 16 bajtów bez użycia soli
- 29. Szyfrowanie AES w PowerShell i Pythonie
- 30. Proste szyfrowanie AES przy użyciu WinAPI
Oto, co trzeba dla szyfrowania AES przy użyciu crypto-js –