Javascript'te AES 256 bit şifreleme için bir kitaplık var mı?
Javascript'te AES 256 bit şifreleme için bir kitaplık var mı?
Yanıtlar:
JSAES, JavaScript'te AES'nin güçlü bir uygulamasıdır. http://point-at-infinity.org/jsaes/
İşte slowAES kullanan bir tanıtım sayfası .
slowAES'in kullanımı kolaydı. Mantıksal olarak tasarlanmıştır. Makul OO ambalajı. IV ve Şifreleme modu gibi düğmeleri ve kolları destekler. .NET / C # ile iyi uyumluluk. İsim yanak dilidir; C ++ 'da uygulanmadığı için buna " yavaş AES" denir . Ancak testlerimde pratik olarak yavaş olmadı.
ECB modu yok. Ayrıca, bir ECB modu verildiğinde oldukça kolay bir şekilde oluşturabilmenize rağmen, bir TO modu yok.
Yalnızca şifrelemeye odaklanır. Javascript'te RFC2898 uyumlu parola tabanlı anahtar türetme yapan güzel bir tamamlayıcı sınıf, Anandam'dan edinilebilir . Bu kitaplık çifti, benzer .NET sınıflarıyla iyi çalışır. İyi birlikte çalışma. Bununla birlikte, SlowAES'in aksine, Javascript PBKDF2, anahtarlar oluştururken Rfc2898DeriveBytes sınıfından belirgin ölçüde daha yavaştır .
Teknik olarak iyi bir birlikte çalışmanın olması şaşırtıcı değil, ancak benim için kilit nokta, SlowAES tarafından benimsenen modelin tanıdık ve kullanımının kolay olmasıydı. AES için diğer bazı Javascript kitaplıklarının anlaşılması ve kullanılması zor buldum. Örneğin, bazılarında IV'ü veya modu (CBC, ECB, vb.) Ayarlamak için yer bulamadım. İşler beklediğim yerde değildi. SlowAES öyle değildi. Mülkler tam olmasını beklediğim yerdeydi. Java ve .NET kripto programlama modellerine aşina olduğum için öğrenmesi kolaydı.
Anandam'ın PBKDF2'si o düzeyde değildi. DeriveBytes işlevine yalnızca tek bir çağrıyı desteklediğinden, bir paroladan hem bir anahtar hem de bir IV türetmeniz gerekirse, bu kitaplık değişmeden çalışmaz. Küçük bir değişiklik ve bu amaç için gayet iyi çalışıyor.
DÜZENLEME : Ben araya bir örnek ambalaj SlowAES ve Anandam en değiştirilmiş bir sürümü PBKDF2 Windows komut dosyası bileşenleri içine. Bu AES'yi paroladan türetilmiş bir anahtarla kullanmak, .NET RijndaelManaged sınıfı ile iyi bir etkileşim olduğunu gösterir.
DÜZENLEME2 : demo sayfası , bir web sayfasından bu AES şifrelemesinin nasıl kullanılacağını gösterir. .NET'te desteklenen aynı girişleri (iv, anahtar, mod, vb.) Kullanmak, .NET Rijndael sınıfıyla iyi bir etkileşim sağlar. O sayfa için javascript almak için bir "kaynağı görüntüle" yapabilirsiniz.
EDIT3
geç bir ekleme: Javascript Cryptography zararlı kabul edildi. Okumaya değer.
AES şifreleme araştırmalarımda bunu bazı Standford öğrencilerinden buldum. Orada en hızlı olduğunu iddia ediyor. CCM, OCB, GCM ve Blok şifrelemeyi destekler. http://crypto.stanford.edu/sjcl/
Googling "JavaScript AES" birkaç örnek buldu. Açılan ilki, algoritmayı açıklamak ve bir çözüm sağlamak için tasarlanmıştır:
Bu gönderi artık eski, ancak crypto-js şu anda en eksiksiz javascript şifreleme kitaplığı olabilir.
CryptoJS , JavaScript'te uygulanan bir şifreleme algoritmaları koleksiyonudur. Aşağıdaki şifreleri içerir: AES-128, AES-192, AES-256, DES, Triple DES, Rabbit, RC4, RC4Drop ve hashers: MD5, RIPEMD-160, SHA-1, SHA-256, SHA-512, SHA -3, 224, 256, 384 veya 512 bit.
Aşağıdaki node.js bağlantı noktası için de referans olan Hızlı Başlangıç Kılavuzuna bakmak isteyebilirsiniz .
düğüm cryptojs AES bir node.js liman cryptojs
Son zamanlarda javascript ve python arasında bazı şifreleme / şifre çözme birlikte çalışabilirliği gerçekleştirme ihtiyacım vardı.
Özellikle ...
1) Javascript'te şifrelemek ve python'da şifresini çözmek için AES'i kullanma (Google App Engine) 2) Javascript'te şifrelemek ve python'da şifresini çözmek için RSA kullanma (Google App Engine) 3) Pycrypto kullanma
Web'de dolaşan çok sayıda farklı RSA ve AES sürümü buldum ve yaklaşımlarında hepsi farklıydı, ancak uçtan uca javascript ve python birlikte çalışabilirliği için iyi bir örnek bulamadım.
Sonunda, birçok deneme yanılma sonrasında ihtiyaçlarıma uygun bir şeyi bir araya getirmeyi başardım.
Her neyse, AES ve genel anahtar ve özel anahtar RSA öğeleri kullanan bir google uygulama motoru barındırılan python sunucusuyla konuşan bir js / webapp örneğini aldım.
Aynı şeyi başarmaya ihtiyaç duyan başkalarına da bir faydası olması durumunda, buraya bağlantı yoluyla eklemeyi düşündüm.
http://www.ipowow.com/files/aesrsademo.tar.gz
ve görün demo de rsa-aes-demo DOT appspot DOT com
düzenleme: tarayıcı konsolu çıktısına bakın ve ayrıca demoda neler olup bittiğine ilişkin bazı ipuçları ve faydalı mesajlar almak için kaynağı görüntüleyin
düzenleme: çok eski güncellendi ve şu anda kaynağa giden bağlantı geçersiz
Kendi deneyimlerime göre, asmcrypto.js JavaScript'te en hızlı AES uygulamasını sağlar (özellikle Firefox'ta asm.js'den tamamen yararlanabildiği için).
Benioku'dan:
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)
Düzenleme: Web Kriptografi API şimdi olduğu birçok tarayıcıda uygulanan ve performanstaki veriyorsan birincil çözüm olarak kullanılmalıdır. IE11'in, vaatleri kullanmayan, standardın daha önceki bir taslak sürümünü uyguladığını unutmayın.
Bazı örnekler burada bulunabilir:
CryptoJS kullanın
İşte kod: https://github.com/odedhb/AES-encrypt
Ve işte çevrimiçi bir çalışma örneği: https://odedhb.github.io/AES-encrypt/
Asmcrypto.js'yi deneyin - gerçekten hızlı.
Not: Ben bir yazarım ve varsa sorularınıza cevap verebilirim. Ayrıca geri bildirim almaktan memnuniyet duyarım :)
http://www.movable-type.co.uk/scripts/aes.html kitaplığı size yardımcı olabilir.
SSL kullanmaktan kaçınmak için javascript kullanmaya çalışıyorsanız, tekrar düşünün. Pek çok yarı yol önlemi vardır, ancak yalnızca SSL güvenli iletişim sağlar. Javascript şifreleme kitaplıkları belirli saldırılara karşı yardımcı olabilir, ancak gerçek bir ortadaki adam saldırısına karşı değil.
Özel bir etki alanında google uygulama motoru için SSL arıyorsanız, wwwizer.com adresine bir göz atın .
Aşağıdaki gönderi, javascript ile nasıl güvenli iletişim girişiminin oluşturulacağını ve bunun nasıl yanlış yapılacağını açıklamaktadır: SSL / HTTPS yerine JavaScript şifreleme modülünü kullanın
Cryptojs'e alternatif olarak Stanford ücretsiz kitaplığı da var
AES-256 destekli başka bir çözüm: https://github.com/digitalbazaar/forge
İşte benim için işe yarayan tek çözüm:
http://www.hanewin.net/encrypt/aes/aes.htm
Oldukça basit, ancak kullanımı basit ve iyi çalışıyor gibi görünüyor.