Có thư viện nào dành cho mã hóa AES 256-bit trong Javascript không?
Có thư viện nào dành cho mã hóa AES 256-bit trong Javascript không?
Câu trả lời:
JSAES là một triển khai mạnh mẽ của AES trong JavaScript. http://point-at-infinity.org/jsaes/
Đây là trang trình diễn sử dụng slowAES.
slowAES rất dễ sử dụng. Được thiết kế hợp lý. Bao bì OO hợp lý. Hỗ trợ các nút và đòn bẩy như IV và chế độ Mã hóa. Tương thích tốt với .NET / C #. Tên là lưỡi trong má; nó được gọi là " AES chậm " 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 chậm một cách phi thực tế.
Nó thiếu chế độ ECB. Cũng thiếu chế độ CTR, mặc dù bạn có thể tạo một chế độ khá dễ dàng với chế độ ECB, tôi đoán vậy.
Nó chỉ tập trung vào mã hóa. Một lớp bổ sung tuyệt vời có khả năng lấy khóa dựa trên mật khẩu tuân thủ RFC2898 , trong Javascript, có sẵn từ Anandam . Cặp thư viện này hoạt động tốt với các lớp .NET tương tự. Tương tác tốt. Tuy nhiên, 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.
Không có gì ngạc nhiên khi về mặt kỹ thuật có một tương tác tốt, nhưng điểm mấu chốt đối với tôi là mô hình được SlowAES áp dụng rất quen thuộc và dễ sử dụng. Tôi thấy một số thư viện Javascript khác dành cho AES khó hiểu và khó sử dụng. Ví dụ: trong một số chúng, tôi không thể tìm thấy nơi để đặt IV hoặc chế độ (CBC, ECB, v.v.). Mọi thứ không như tôi mong đợi. SlowAES không như vậy. Các tài sản đã ở đúng nơi tôi mong đợi. Thật dễ dàng đối với tôi, tôi đã quen thuộc với các mô hình lập trình tiền điện tử 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 đến 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ì thư viện này sẽ không hoạt động, không thay đổi. Một số sửa đổi nhỏ, và nó đang hoạt động tốt cho mục đích đó.
CHỈNH SỬA : Tôi đã tổng hợp một ví dụ về đóng gói SlowAES và một phiên bản sửa đổi của PBKDF2 của Anandam thành Thành phần Tập lệnh Windows. Sử dụng AES này với khóa lấy từ mật khẩu cho thấy khả năng tương tác tốt với lớp .NET RijndaelManaged.
EDIT2 : trang demo hiển thị cách sử dụng mã hóa AES này từ một trang web. Sử dụng các đầu vào tương tự (iv, phím, chế độ, v.v.) được hỗ trợ trong .NET mang lại cho bạn khả năng tương tác tốt với lớp .NET Rijndael. Bạn có thể làm một "nguồn xem" để lấy javascript cho trang đó.
EDIT3
một bổ sung muộn: Javascript Cryptography được coi là có hại. Đáng để đọc.
Trong các tìm kiếm mã hóa AES, tôi đã tìm thấy điều này từ một số sinh viên Standford. Tuyên bố là nhanh nhất hiện có. Hỗ trợ mã hóa CCM, OCB, GCM và Block. http://crypto.stanford.edu/sjcl/
Googling "JavaScript AES" đã tìm thấy một số ví dụ. Cái đầu tiên xuất hiện được thiết kế để giải thích thuật toán cũng như cung cấp giải pháp:
Bài đăng này hiện đã cũ, nhưng tiền điện tử , hiện có thể là thư viện mã hóa javascript hoàn chỉnh nhất.
CryptoJS là một tập hợp các thuật toán mật mã được thực hiện bằng JavaScript. Nó bao gồm các bộ mã hóa sau: AES-128, AES-192, AES-256, DES, Triple DES, Rabbit, RC4, RC4Drop và các bộ băm: 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 Hướng dẫn bắt đầu nhanh của họ , đây cũng là tài liệu tham khảo cho cổng node.js sau.
node-cryptojs-aes là một cổng node.js của crypto-js
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 biệt...
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 khác nhau của RSA và AES trôi nổi trên web và chúng đều khác nhau trong cách tiếp cận nhưng tôi không tìm thấy một ví dụ nào tốt về khả năng tương tác giữa javascript và python.
Cuối cùng, tôi đã cố gắng tập hợp một cái gì đó phù hợp với nhu cầu của tôi sau rất nhiều lần thử và sai.
Nhưng dù sao, tôi đã lấy ra một ví dụ về js / webapp nói chuyện với máy chủ python được lưu trữ trên công cụ ứng dụng của Google sử dụng AES và công cụ RSA khóa công khai và khóa riêng tư.
Mặc dù tôi sẽ đưa nó vào đây theo liên kết trong trường hợp nó sẽ có ích cho những người khác, những người cần hoàn thành điều tương tự.
http://www.ipowow.com/files/aesrsademo.tar.gz
và xem demo tại rsa-aes-demo DOT appspot DOT com
chỉnh sửa: xem đầu ra bảng điều khiển trình duyệt và cũng xem nguồn để nhận một số gợi ý và thông báo hữu ích về những gì đang diễn ra trong bản trình diễn
chỉnh sửa: cập nhật liên kết rất cũ và không còn tồn tại đến nguồn cho đến nay trỏ tới
Đánh giá từ 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ó hoàn toàn có thể tận dụng asm.js ở đó).
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)
Chỉnh sửa: Các Web Cryptography API hiện đang thực hiện ở hầu hết các trình duyệt và phải đượ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. Cần biết 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 các hứa hẹn.
Một số ví dụ có thể được tìm thấy ở đây:
Sử dụng CryptoJS
Đây là mã: https://github.com/odedhb/AES-encrypt
Và đây là một ví dụ làm việc trực tuyến: https://odedhb.github.io/AES-encrypt/
Hãy thử asmcrypto.js - nó thực sự nhanh chóng.
Tái bút: 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 rất vui khi nhận được một số phản hồi :)
Thư viện http://www.movable-type.co.uk/scripts/aes.html có thể hữu ích.
Nếu bạn đang cố gắng sử dụng javascript để tránh sử dụng SSL, hãy suy nghĩ lại. Có nhiều biện pháp nửa vời, nhưng chỉ SSL cung cấp giao tiếp an toàn. Các thư viện mã hóa Javascript có thể giúp chống lại một số cuộc tấn công nhất định, nhưng không phải là một cuộc tấn công trung gian thực sự.
Nếu bạn đang tìm kiếm SSL cho công cụ ứng dụng google trên miền tùy chỉnh, hãy xem tại wwwizer.com .
Bài đăng sau giải thích cách tạo cố gắng giao tiếp an toàn với javascript và cách xử lý sai: Sử dụng mô-đun mã hóa JavaScript thay vì SSL / HTTPS
Ngoài ra còn có lib miễn phí tại Stanford như một giải pháp thay thế cho Cryptojs
Một giải pháp khác có hỗ trợ AES-256: 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 đơn giản để sử dụng và dường như hoạt động tốt.