web-dev-qa-db-ja.com

Javascript AES暗号化

JavascriptでAES 256ビット暗号化に使用できるライブラリはありますか?

105
coder

JSAESは、JavaScriptでのAESの強力な実装です。 http://point-at-infinity.org/jsaes/

63
backslash17

デモページ は、slowAESを使用しています。

slowAES は簡単に使用できました。論理的に設計されています。合理的なOOパッケージ。 IVおよび暗号化モードのようなノブとレバーをサポートします。 .NET/C#との良好な互換性。名前は舌のようです。 C++に実装されていないため、「slowAES」と呼ばれます。しかし、私のテストでは、それは実用的ではありませんでした。

ECBモードがありません。また、CTRモードはありませんが、ECBモードを使用すると非常に簡単に作成できます。

暗号化のみに焦点を当てています。 Javascriptで RFC2898 に準拠したパスワードベースのキー派生を行うNice補完クラスは Anandamから入手可能 です。このライブラリのペアは、類似の.NETクラスでうまく機能します。良い相互運用性。ただし、SlowAESとは対照的に、Javascript PBKDF2は、キーを生成するときに Rfc2898DeriveBytes クラスよりも著しく遅くなります。

技術的に優れた相互運用性があることは驚くことではありませんが、私にとって重要な点は、SlowAESで採用されているモデルが使い慣れていて使いやすいことでした。 AES用の他のJavascriptライブラリのいくつかは、理解と使用が難しいことがわかりました。たとえば、それらのいくつかでは、IVまたはモード(CBC、ECBなど)を設定する場所が見つかりませんでした。物事は私が期待する場所ではありませんでした。 SlowAESはそうではありませんでした。プロパティは、私が期待する場所に正しかった。 Javaおよび.NET暗号プログラミングモデルに精通しているので、簡単に手に入れることができました。

AnandamのPBKDF2は、そのレベルではまったくありませんでした。 DeriveBytes関数への単一の呼び出しのみをサポートしているため、パスワードからキーとIVの両方を導出する必要がある場合、このライブラリは変更せずに機能しません。若干の修正が加えられており、その目的のためにうまく機能しています。

編集:私はまとめました パッケージング SlowAES とAnandamの修正版 PBKDF2 Windowsスクリプトコンポーネントに。このAESとパスワード派生キーを使用すると、.NET RijndaelManagedクラスとの良好な相互運用性が示されます。

EDIT2デモページ は、WebページからこのAES暗号化を使用する方法を示しています。 .NETでサポートされている同じ入力(iv、キー、モードなど)を使用すると、.NET Rijndaelクラスとの良好な相互運用性が得られます。 「ソースの表示」を実行して、そのページのJavaScriptを取得できます。

EDIT3
後期追加: Javascript暗号は有害と見なされます。 読む価値があります。

35
Cheeso

AES暗号化の検索で、Standfordの学生からこれを見つけました。最速であると主張しています。 CCM、OCB、GCM、およびブロック暗号化をサポートします。 http://crypto.stanford.edu/sjcl/

25
Danny C

グーグル「JavaScript AES」 はいくつかの例を見つけました。最初に表示されたものは、アルゴリズムを説明し、解決策を提供するように設計されています。

移動可能なタイプのスクリプト:AES

12
Samir Talwar

この投稿は現在は古いですが、 crypto-js が最も完全なjavascript暗号化ライブラリである可能性があります。

CryptoJS は、JavaScriptで実装された暗号化アルゴリズムのコレクションです。次の暗号が含まれます:AES-128、AES-192、AES-256、DES、Triple DES、Rabbit、RC4、RC4Dropおよびハッカー:MD5、RIPEMD-160、SHA-1、SHA-256、SHA-512、SHA 224、256、384、または512ビットで-3。

クイックスタートガイド をご覧ください。これは、次のnode.jsポートのリファレンスでもあります。

node-cryptojs-aescrypto-js のnode.jsポートです

10
marcz

最近、JavaScriptとPythonの間で暗号化/復号化の相互運用性を実行する必要がありました。

具体的には...

1)AESを使用してjavascriptで暗号化し、python(Google App Engine)で復号化する2)RSAを使用してjavascriptで暗号化し、python(Google App Engine)で復号化する3)pycryptoを使用する

RSAとAESの多くの異なるバージョンがWebの周りに浮かんでいるのを見つけ、それらのアプローチはすべて異なっていましたが、エンドツーエンドのjavascriptとpythonの相互運用性の良い例は見つかりませんでした。

結局、私は多くの試行錯誤の後、自分のニーズに合ったものを一緒にまとめることができました。

とにかく、AESと公開キーと秘密キーRSAを使用するpythonサーバーをホストするGoogleアプリエンジンと通信するjs/webappの例をノックアップしました。

同じことを成し遂げる必要のある他の人に役立つ場合に備えて、ここにリンクで含めます。

http://www.ipowow.com/files/aesrsademo.tar.gz

およびdemoを参照してくださいrsa-aes-demo DOT appspot DOT com

編集:ブラウザコンソールの出力を確認し、ソースを表示して、demoで何が行われているかについてのヒントと有用なメッセージを取得します

編集:ソースへの非常に古い、無効なリンクを指すように更新しました

https://sestertii.com/files/aesrsademo.tar.gz

8
David Kierans

私自身の経験から判断すると、 asmcrypto.js はJavaScriptで最速のAES実装を提供します(特にFirefoxでは、asm.jsを完全に活用できるため)。

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 は現在 ほとんどのブラウザに実装されています であり、パフォーマンスを重視する場合の主なソリューション。 IE11は、Promiseを使用しない標準のドラフトバージョンを実装していることに注意してください。

いくつかの例をここに見つけることができます:

7
Joel Richard

CryptoJSを使用する

コードは次のとおりです。 https://github.com/odedhb/AES-encrypt

そして、ここにオンラインの作業例があります: https://odedhb.github.io/AES-encrypt/

5
Oded Breiner

asmcrypto.js を試してください—非常に高速です。

PS:私は著者であり、もしあれば質問に答えることができます。また、私はいくつかのフィードバックを得てうれしいです:)

4
vibornoff
1
arun

Cryptojsの代替としてスタンフォードの無料ライブラリもあります

http://crypto.stanford.edu/sjcl/

1
Jai

私のために働いた唯一のソリューションは次のとおりです。

http://www.hanewin.net/encrypt/aes/aes.htm

それはかなり基本的ですが、使いやすく、うまく機能しているようです。

1
CpnCrunch

AES-256をサポートする別のソリューション: https://github.com/digitalbazaar/forge

1
dlongley

SSLの使用を避けるためにJavaScriptを使用しようとしている場合は、もう一度考えてください。多くの中途対策がありますが、onlySSLは安全な通信を提供します。 Javascript暗号化ライブラリは、特定の一連の攻撃に対して役立ちますが、真の中間者攻撃には役立ちません。

カスタムドメインでGoogle App EngineのSSLを探している場合は、 wwwizer.com をご覧ください。

次の投稿では、JavaScriptを使用したセキュアな通信の試行を作成する方法と、それを誤る方法について説明します。 SSL/HTTPSの代わりにJavaScript暗号化モジュールを使用

1
speedplane

http://www.movable-type.co.uk/scripts/aes.html ライブラリは助けになるかもしれません。

1
Kirtan