Apakah ada perpustakaan yang tersedia untuk enkripsi AES 256-bit di Javascript?
Apakah ada perpustakaan yang tersedia untuk enkripsi AES 256-bit di Javascript?
Jawaban:
JSAES adalah implementasi yang kuat dari AES di JavaScript. http://point-at-infinity.org/jsaes/
Berikut adalah halaman demonstrasi yang menggunakan slowAES.
slowAES mudah digunakan. Didesain secara logis. Kemasan OO yang wajar. Mendukung kenop dan tuas seperti mode IV dan Enkripsi. Kompatibilitas yang baik dengan .NET / C #. Namanya lidah di pipi; ini disebut " AES lambat " karena tidak diterapkan di C ++. Tapi dalam pengujian saya itu tidak terlalu lambat.
Itu tidak memiliki mode ECB. Juga tidak memiliki mode CTR, meskipun Anda bisa membuatnya dengan cukup mudah dengan mode ECB, saya rasa.
Ini hanya berfokus pada enkripsi. Kelas pelengkap yang bagus yang melakukan turunan kunci berbasis kata sandi RFC2898 , dalam Javascript, tersedia dari Anandam . Sepasang pustaka ini bekerja dengan baik dengan kelas .NET analog. Interop yang bagus. Padahal, berbeda dengan SlowAES, PBKDF2 Javascript terasa lebih lambat daripada kelas Rfc2898DeriveBytes saat membuat kunci.
Tidak mengherankan jika secara teknis ada interop yang bagus, tetapi poin kuncinya bagi saya adalah model yang diadopsi oleh SlowAES sudah familiar dan mudah digunakan. Saya menemukan beberapa perpustakaan Javascript lain untuk AES menjadi sulit untuk dipahami dan digunakan. Misalnya, di beberapa dari mereka saya tidak dapat menemukan tempat untuk mengatur IV, atau mode (CBC, ECB, dll). Hal-hal tidak seperti yang saya harapkan. SlowAES tidak seperti itu. Properti berada tepat di tempat yang saya harapkan. Mudah bagi saya untuk mengambilnya, karena telah terbiasa dengan model pemrograman kripto Java dan .NET.
PBKDF2 Anandam tidak cukup di level itu. Ini hanya mendukung satu panggilan ke fungsi DeriveBytes, jadi jika Anda perlu mendapatkan kunci dan IV dari kata sandi, pustaka ini tidak akan berfungsi, tidak berubah. Sedikit modifikasi, dan berfungsi dengan baik untuk tujuan itu.
EDIT : Saya mengumpulkan contoh pengemasan SlowAES dan versi modifikasi dari PBKDF2 Anandam ke dalam Komponen Skrip Windows. Menggunakan AES ini dengan kunci turunan kata sandi menunjukkan interop yang baik dengan kelas .NET RijndaelManaged.
EDIT2 : halaman demo menunjukkan bagaimana menggunakan enkripsi AES ini dari halaman web. Menggunakan input yang sama (iv, key, mode, dll) yang didukung di .NET memberi Anda interop yang baik dengan kelas .NET Rijndael. Anda dapat melakukan "lihat sumber" untuk mendapatkan javascript untuk halaman tersebut.
EDIT3
tambahan terlambat: Kriptografi Javascript dianggap berbahaya. Layak dibaca.
Dalam pencarian saya untuk enkripsi AES, saya menemukan ini dari beberapa siswa Standford. Mengklaim sebagai yang tercepat di luar sana. Mendukung enkripsi CCM, OCB, GCM dan Blokir. http://crypto.stanford.edu/sjcl/
Googling "JavaScript AES" telah menemukan beberapa contoh. Yang pertama yang muncul dirancang untuk menjelaskan algoritme serta memberikan solusi:
Posting ini sekarang sudah lama, tetapi crypto-js , mungkin sekarang adalah pustaka enkripsi javascript terlengkap.
CryptoJS adalah kumpulan algoritma kriptografi yang diimplementasikan dalam JavaScript. Ini mencakup kode sandi berikut: AES-128, AES-192, AES-256, DES, Triple DES, Rabbit, RC4, RC4Drop dan hasher: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3 dengan 224, 256, 384, atau 512 bit.
Anda mungkin ingin melihat Panduan Memulai Cepat mereka yang juga merupakan referensi untuk port node.js berikut.
node-cryptojs-aes adalah port node.js dari crypto-js
Baru-baru ini saya perlu melakukan beberapa interoperabilitas enkripsi / dekripsi antara javascript dan python.
Secara khusus...
1) Menggunakan AES untuk mengenkripsi dalam javascript dan mendekripsi dengan python (Google App Engine) 2) Menggunakan RSA untuk mengenkripsi dalam javascript dan mendekripsi dalam python (Google App Engine) 3) Menggunakan pycrypto
Saya menemukan banyak dan banyak versi RSA dan AES yang berbeda mengambang di web dan semuanya berbeda dalam pendekatannya, tetapi saya tidak menemukan contoh yang baik dari interoperabilitas javascript dan python ujung ke ujung.
Akhirnya saya berhasil menggabungkan sesuatu yang sesuai dengan kebutuhan saya setelah banyak percobaan dan kesalahan.
Bagaimanapun saya menemukan contoh js / webapp berbicara dengan server python yang dihosting mesin aplikasi google yang menggunakan AES dan kunci publik dan barang-barang RSA kunci pribadi.
Saya pikir saya akan memasukkannya di sini melalui tautan jika itu akan berguna bagi orang lain yang perlu mencapai hal yang sama.
http://www.ipowow.com/files/aesrsademo.tar.gz
dan lihat demo di rsa-aes-demo DOT appspot DOT com
edit: lihat output konsol browser dan juga lihat sumber untuk mendapatkan beberapa petunjuk dan pesan berguna tentang apa yang terjadi di demo
edit: tautan yang sangat lama dan tidak berfungsi yang diperbarui ke sumber sekarang mengarah ke
Dilihat dari pengalaman saya sendiri, asmcrypto.js menyediakan implementasi AES tercepat di JavaScript (terutama di Firefox karena dapat memanfaatkan asm.js sepenuhnya di sana).
Dari 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: The Web Kriptografi API kini diterapkan di sebagian besar browser dan harus digunakan sebagai solusi utama jika Anda peduli tentang kinerja. Ketahuilah bahwa IE11 menerapkan versi draf sebelumnya dari standar yang tidak menggunakan promise.
Beberapa contoh dapat ditemukan di sini:
Gunakan CryptoJS
Berikut kodenya: https://github.com/odedhb/AES-encrypt
Dan inilah contoh kerja online: https://odedhb.github.io/AES-encrypt/
Coba asmcrypto.js - ini sangat cepat.
PS: Saya seorang penulis dan saya bisa menjawab pertanyaan Anda jika ada. Saya juga akan senang mendapatkan umpan balik :)
http://www.movable-type.co.uk/scripts/aes.html perpustakaan mungkin bisa membantu.
Jika Anda mencoba menggunakan javascript untuk menghindari penggunaan SSL, pikirkan lagi. Ada banyak tindakan setengah jalan, tetapi hanya SSL yang menyediakan komunikasi yang aman. Perpustakaan enkripsi Javascript dapat membantu melawan serangkaian serangan tertentu, tetapi bukan serangan man-in-the-middle.
Jika Anda mencari SSL untuk mesin aplikasi google pada domain khusus, lihat wwwizer.com .
Posting berikut menjelaskan cara membuat upaya komunikasi aman dengan javascript dan cara membuatnya salah: Gunakan modul enkripsi JavaScript, bukan SSL / HTTPS
Ada juga lib gratis Stanford sebagai alternatif untuk Cryptojs
Solusi lain dengan dukungan AES-256: https://github.com/digitalbazaar/forge
Inilah satu-satunya solusi yang berhasil untuk saya:
http://www.hanewin.net/encrypt/aes/aes.htm
Ini cukup mendasar, tetapi mudah digunakan dan tampaknya berfungsi dengan baik.