Có thư viện nào có sẵn để mã hóa AES 256 bit trong Javascript không?Mã hóa AES Javascript
Trả lời
JSAES là triển khai mạnh mẽ AES trong JavaScript. http://point-at-infinity.org/jsaes/
JSAES được cấp phép theo GNU GPL - do đó nó không thể sử dụng được đối với một số dự án. – Robert
Làm cách nào để chỉ định 'chế độ hoạt động' và IV? Trông không phải là một lựa chọn. –
Tính năng này hiện hữu ích và giàu tính năng http://code.google.com/p/crypto-js/ –
Googling "JavaScript AES" đã tìm thấy một số ví dụ. Người đầu tiên mà popped lên được thiết kế để giải thích các thuật toán cũng như cung cấp một giải pháp:
Tôi không thể tìm ra cách đặt IV trong thư viện đó. Ngoài ra nó không phải là rất OO. – Cheeso
Tương đương với IV trong chế độ truy cập là nonce. Việc thực hiện này đã được cải cách để có nhiều OO hơn. Nó chỉ bao gồm chế độ hoạt động của bộ đếm (CTR). – ChrisV
Điều này hoạt động khá tốt, ngoại trừ nó không có bất kỳ chế độ ECB nào. – CpnCrunch
http://www.movable-type.co.uk/scripts/aes.html thư viện có thể giúp đỡ một số.
Đây là a demonstration page sử dụng slowAES.
slowAES dễ sử dụng. Thiết kế hợp lý. Hợp lý OO bao bì. Hỗ trợ các nút bấm và đòn bẩy như chế độ Mã hóa và IV. Khả năng tương thích tốt với .NET/C#. Cái tên là lưỡi-trong-má; nó được gọi là "slow AES" vì nó không được triển khai trong C++. Nhưng trong các thử nghiệm của tôi nó không phải là chậm chạp.
Nó thiếu chế độ ECB. Cũng thiếu chế độ CTR, mặc dù bạn có thể xây dựng một chế độ khá dễ dàng cho chế độ ECB, tôi đoán vậy.
Nó chỉ tập trung vào mã hóa. Một lớp bổ sung tốt đẹp thực hiện RFC2898 bắt nguồn từ khóa dựa trên mật khẩu đầy đủ, trong Javascript, là available from Anandam. Cặp thư viện này hoạt động tốt với các lớp .NET tương tự. Tốt interop. Mặc dù, trái ngược với SlowAES, Javascript PBKDF2 chậm hơn đáng kể so với lớp Rfc2898DeriveBytes khi tạo khóa.
Thật không ngạc nhiên khi kỹ thuật có giao tiếp tốt, nhưng điểm mấu chốt đối với tôi là mô hình được chấp nhận bởi SlowAES rất quen thuộc và dễ sử dụng. Tôi đã tìm thấy một số thư viện Javascript khác cho AES khó hiểu và sử dụng. Ví dụ, trong một số người trong số họ tôi không thể tìm thấy nơi để thiết lập IV, hoặc chế độ (CBC, ECB, vv). Mọi thứ không phải là nơi tôi mong đợi. SlowAES không như thế. Các tài sản đã đúng nơi tôi mong đợi họ được. Thật dễ dàng để tôi nhận, đã quen thuộc với các mô hình lập trình Java và .NET.
PBKDF2 của Anandam không hoàn toàn ở cấp độ đó. Nó chỉ hỗ trợ một lệnh gọi hàm DeriveBytes, vì vậy nếu bạn cần lấy cả khóa và IV từ mật khẩu, thư viện này sẽ không hoạt động, không thay đổi. Một số sửa đổi nhỏ, và nó hoạt động tốt cho mục đích đó.
EDIT: Tôi đặt cùng an example bao bì SlowAES và một phiên bản sửa đổi của Anandam của PBKDF2 vào Windows Script Components. Sử dụng AES này với một khóa có nguồn gốc từ mật khẩu cho thấy sự tương tác tốt với lớp .NET RijndaelManaged.
EDIT2: the demo page cho biết cách sử dụng mã hóa AES này từ trang web. Sử dụng cùng một đầu vào (iv, khóa, chế độ, v.v.) được hỗ trợ trong .NET cho phép bạn tương tác tốt với lớp .NET Rijndael. Bạn có thể làm một "nguồn xem" để có được javascript cho trang đó.
EDIT3
một bổ sung cuối: Javascript Cryptography considered harmful. Worth đọc.
+1 cho [Mật mã JavaScript được coi là có hại] (http://www.matasano.com/articles/javascript-cryptography/) –
Tôi thấy một trường hợp sử dụng hợp lệ - ứng dụng HTML 5 trong đó tất cả các tệp được lưu trữ ở địa phương. Nếu các tập tin địa phương có thể bị tấn công thì bạn phải chịu số phận trong mọi trường hợp ;-). – Nux
về liên kết edit3, nó là một phần của một bài báo ... một nửa các tuyên bố của nó là hoàn toàn sai! – momomo
Trong các tìm kiếm của tôi cho mã hóa AES, tôi đã tìm thấy điều này từ một số sinh viên của Standford. Yêu cầu được nhanh nhất ra khỏi đó.Hỗ trợ mã hóa CCM, OCB, GCM và Block. http://crypto.stanford.edu/sjcl/
đó là những gì tôi đang nói về! – momomo
Tài liệu còn thiếu và khó sử dụng. Bạn thay đổi độ dài khóa như thế nào? Tôi săn lùng các tài liệu và không thể tìm ra nó trong một thời gian hợp lý. Ngoài ra khi bạn mã hóa một cái gì đó bạn sẽ nhận được một mảng các cặp khóa-giá trị được trả về, nhưng các tài liệu dường như không giải thích được điều này. Tôi đã kết thúc bằng cách sử dụng thư viện kiểu di chuyển. – CpnCrunch
Và điều này không phải là không đồng bộ vì vậy nếu bạn đang mã hóa hoặc giải mã một số chuỗi dài hơn ví dụ với AES-CBC, sau đó nó chặn giao diện người dùng – rsz
Gần đây tôi đã có nhu cầu thực hiện một số khả năng tương tác mã hóa/giải mã giữa javascript và python.
Cụ thể ...
1) Sử dụng AES để mã hóa trong javascript và giải mã trong python (Google App Engine) 2) Sử dụng RSA để mã hóa trong javascript và giải mã trong python (Google App Engine) 3) Sử dụng pycrypto
Tôi đã tìm thấy rất nhiều phiên bản RSA và AES khác nhau trên web và tất cả đều khác nhau trong cách tiếp cận của chúng nhưng tôi không tìm thấy ví dụ điển hình về khả năng tương thích giữa javascript và python.
Cuối cùng tôi đã xoay xở để cùng nhau điều gì đó phù hợp với nhu cầu của tôi sau nhiều lần thử và sai.
Dù sao thì tôi đã lấy ví dụ về một js/webapp đang nói chuyện với máy chủ python được lưu trữ trên máy chủ ứng dụng google sử dụng khóa AES và khóa công khai và khóa RSA riêng.
Tôi mặc dù tôi sẽ bao gồm nó ở đây bằng liên kết trong trường hợp nó sẽ được sử dụng một số cho những người khác cần phải thực hiện cùng một điều.
http://www.ipowow.com/files/aesrsademo.tar.gz
và xem bản demo tại rsa-aes-demo DOT appspot DOT com
chỉnh sửa: nhìn vào trình duyệt giao diện điều khiển đầu ra và cũng có thể xem mã nguồn để có được một số gợi ý và thông điệp hữu ích như những gì xảy ra trong bản demo
chỉnh sửa: cập nhật link rất cũ và không còn tồn tại đến nguồn đến nay trỏ đến
Cảm ơn bạn rất nhiều vì điều này! Tôi không thể cho cuộc sống của tôi có được aes javascript của tôi để nói chuyện với ae trăn của tôi. – Spike
Tôi đã cố gắng cả đêm (với pycrypto và những người khác) để làm những gì mã của bạn đã giúp tôi hoàn thành trong 10 phút. Cảm ơn bạn rất nhiều! –
Vì lý do nào đó tôi có RSA làm việc dễ dàng nhưng AES là một nỗi đau của hoàng gia.Cảm ơn vì điều này!!! – speedplane
Nếu bạn đang cố gắng sử dụng javascript để tránh sử dụng SSL, hãy nghĩ lại. Có nhiều biện pháp nửa chừng, nhưng chỉ SSL cung cấp thông tin liên lạc an toàn. Các thư viện mã hóa Javascript có thể giúp chống lại một loạt các cuộc tấn công nhất định, nhưng không phải là một cuộc tấn công thực sự ở giữa.
Nếu bạn đang tìm kiếm SSL cho công cụ ứng dụng của Google trên miền tùy chỉnh, hãy xem wwwizer.com.
Các bài sau đây giải thích làm thế nào để tạo ra thông tin liên lạc an toàn nỗ lực với javascript và làm thế nào để có được nó sai: Use JavaScript encryption module instead of SSL/HTTPS
Không chắc chắn lý do tại sao điều này đã được downvoted để lãng quên, vì nó là một điểm rất tốt mà bất cứ ai nghĩ đến việc thực hiện mã hóa javascript cần phải ít nhất là xem xét. Được thăng hạng. – Jules
Sử dụng mật mã phía máy khách để tránh SSL là điểm cũ mà một số người nói để chống lại nó: trên thực tế nó có thể thêm bảo mật cho HTTPS, tránh các cuộc tấn công thụ động hoặc được sử dụng trong các ứng dụng đã tải xuống và tiện ích mở rộng của trình duyệt. Tôi chỉ thấy một khi nó được sử dụng sai (trường đại học của tôi, nhưng họ đã cố định nó) và nhiều lần sử dụng đúng (cryptocat, làm ví dụ). –
bài này bây giờ là cũ, nhưng crypto-js, có thể bây giờ là hoàn thiện nhất javascript thư viện mã hóa.
CryptoJS là tập hợp các thuật toán mã hóa được triển khai trong JavaScript. Nó bao gồm các cyphers sau: AES-128, AES-192, AES-256, DES, Triple DES, Thỏ, RC4, RC4Drop và hashers: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA-3 với 224, 256, 384 hoặc 512 bit.
Bạn có thể muốn xem Quick-start Guide cũng là tham chiếu cho cổng node.js sau.
node-cryptojs-aes là một cổng Node.js của crypto-js
Thật không may là tài liệu bị thiếu. Nó chỉ có vẻ như có một hướng dẫn 'bắt đầu nhanh'. Tài liệu đầy đủ ở đâu? Nó nói nó hỗ trợ nhiều độ dài khóa, nhưng không có tài liệu hướng dẫn về cách thực hiện điều đó. – CpnCrunch
@CpnCrunch: tài liệu API đầy đủ không trực tuyến, nhưng mã là nhận xét đầy đủ về javadoc api. Và bạn có thể tạo ra nó. Đọc các nhận xét trên [cipher-core.js source] (http://code.google.com/p/crypto-js/source/browse/tags/3.1.2/src/cipher-core.js) youl tìm thấy thuật toán mã hóa kích thước khóa và kích thước IV của mật mã. – marcz
lạ, khi tôi mã hóa và giải mã trở lại, các văn bản khác nhau – OMGPOP
Ngoài ra còn có một Stanford lib miễn phí như một thay thế cho Cryptojs
Một giải pháp w/AES-256 hỗ trợ: https://github.com/digitalbazaar/forge
Đây là giải pháp duy nhất phù hợp với tôi:
http://www.hanewin.net/encrypt/aes/aes.htm
Nó khá cơ bản nhưng dễ sử dụng và có vẻ hoạt động tốt.
Làm cách nào để bạn thực sự gọi hàm mã hóa và giải mã? – guest176969
https://www.hanewin.net/encrypt/aes/aes-test.htm – CpnCrunch
Đánh giá theo kinh nghiệm của riêng tôi, asmcrypto.js cung cấp triển khai AES nhanh nhất trong JavaScript (đặc biệt là trong Firefox vì nó có thể tận dụng đầy đủ asm.js tại đó).
Từ 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: Các Web Cryptography API tại là implemented in most browsers và nên được sử dụng như một giải pháp chính nếu bạn quan tâm đến hiệu suất. Hãy lưu ý rằng IE11 đã triển khai phiên bản dự thảo trước đó của tiêu chuẩn không sử dụng lời hứa.
Một số ví dụ có thể được tìm thấy ở đây:
Tôi nhận được khoảng 8 MiB/s với CryptoJS. Tự hỏi làm thế nào điều này sẽ thực hiện. – Lodewijk
Hãy thử asmcrypto.js - nó thực sự nhanh.
PS: Tôi là tác giả và tôi có thể trả lời câu hỏi của bạn nếu có. Ngoài ra tôi muốn được vui để nhận được một số phản hồi :)
asmcrypto.js là tốt đẹp, nhưng trên IE10 nó không hoạt động tốt. nó treo trình duyệt trong hơn 1 phút đôi khi, hoặc ít nhất 45 giây. Ngoài ra, tôi không hiểu, tại sao bạn cần thay thế chức năng Toán toàn cầu? có rất nhiều thư viện sử dụng thư viện này. – decho
Bạn có thể nhận xét về cách bạn chắc chắn rằng nó hoạt động đúng không? IOW: Làm thế nào để bạn biết bạn đã triển khai AES đúng cách? – Lodewijk
Hiệu năng IE10 kém vì nó không tối ưu hóa asm.js. Ngoài ra nó có một chút mẫu JIT khác nhau. Làm cho mã hoạt động tốt trong IE cũng làm cho nó bị hút trong Chrome và FF. Giả sử tôi có lựa chọn đúng. Liên quan đến _Math.random_ có một [thảo luận] dài (https://github.com/vibornoff/asmcrypto.js/issues/27). Nói ngắn gọn nhu cầu này để phòng ngừa rò rỉ đầu ra _Math.random_ thô (theo lý thuyết có thể làm suy giảm an ninh PRNG). – vibornoff
Sử dụng CryptoJS
Dưới đây là các mã: https://github.com/odedhb/AES-encrypt
Và đây là một trực tuyến ví dụ làm việc: https://odedhb.github.io/AES-encrypt/
câu trả lời hay nhất – user1735921
- 1. Mã hóa AES và C#
- 2. Lớp mã hóa C++ AES
- 3. Mã hóa AES cách vận chuyển IV
- 4. Mã hóa AES cho một NSString?
- 5. Mã hóa với AES-256 Java
- 6. Mã hóa AES 128 của Android
- 7. AES Mã hóa và lưu trữ khóa?
- 8. Mã hóa/giải mã AES (aes-ige-128, aes-ige-192, age-ige-256) với openssl C
- 9. Mã hóa/giải mã lớp NSData-AES trong Cocoa
- 10. Mã hóa AES với giải mã mở bằng java
- 11. Mã hóa AES trong CryptoJS và giải mã trong Coldfusion
- 12. Mật mã Java Bouncy Castle - Mã hóa với AES
- 13. Mã hóa/giải mã AES giữa Ruby-OpenSSL, PyCrypto
- 14. Mã hóa và giải mã bằng mã hóa AES và Base64
- 15. Mã hóa dữ liệu trên Android, AES-GCM hoặc AES thuần túy?
- 16. Kích thước dữ liệu sau mã hóa AES/CBC và AES/ECB
- 17. Dữ liệu mã hóa AES 256 bit của Android
- 18. Mã hóa AES 16 byte không có muối
- 19. Mã hóa AES Java -> PHP -> Java
- 20. Mã hóa AES đơn giản bằng cách sử dụng WinAPI
- 21. mã hóa AES cắt văn bản trong chế độ CFB
- 22. Làm thế nào để mã hóa trong VBScript bằng AES?
- 23. Mã hóa AES cho một NSString trên iPhone
- 24. Mã hóa hiệu quả các tệp bằng AES trong java
- 25. Mã hóa AES bằng Python có dạng khác nhau iOS
- 26. Mã hóa JavaScript?
- 27. Giải mã AES khối đơn trong Ruby
- 28. AES mã hóa/giải mã với nhà cung cấp Bouncy Castle
- 29. AES mã hóa bằng công cụ dòng lệnh openssl và giải mã trong Java
- 30. Mã hóa AES trong iOS và Android và giải mã trong C# .NET
Dưới đây là những gì bạn cần để mã hóa AES bằng crypto-js –