2017-02-28 8 views
2

nodejsを使用してAES-256で暗号化された文字列を復号したいと考えています。私はそれのための暗号モジュールを使用しています。AESEngineとPKCS7パディング付きのbouncycastleのPaddedBufferedBlockCipherに相当する暗号は何ですか?

文字列はBouncy castle javaライブラリを使用して暗号化されています。 Javaでは、暗号が使用してintialsedさ:

var decipher = crypto.createDecipher('aes-256-cbc',key);

私はどのアルゴリズムを使用する必要があります。nodejsの

PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding());

cryptoモジュールは次のように、それをintialisingために暗号のopensslの者のリストを使用していますか?ここで

の中から選択するアルゴリズムの一覧です:

-bash-4.1$ openssl list-cipher-algorithms|grep AES-256 AES-256-CBC AES-256-CFB AES-256-CFB1 AES-256-CFB8 AES-256-CTR AES-256-ECB AES-256-OFB AES-256-XTS AES256 => AES-256-CBC aes256 => AES-256-CBC

答えて

1

あなたがブロック暗号で何かを暗号化する場合は、入力の単一のブロックを取ると出力の単一のブロックにそれをマングルすることができます

  • ブロック暗号を必要とする(AES用のブロックサイズは16のバイトです)、
  • 構造化形式で複数のブロックを暗号化できる操作モード
  • ブロックサイズの倍数とまったく同じではないものを暗号化できるパディング。

表示されているPaddedBufferedBlockCipherには、2つしか表示されていません。動作モードは、単にブロック暗号を各ブロックに別々に適用することから成っているので、ECBモードであることが暗示される。

var decipher = crypto.createDecipheriv('aes-xxx-ecb', key, ''); 

所ビットであなたの鍵のサイズxxx

あなたはとのNode.jsで同じ動作を取得します。有効なサイズは、128ビット、192ビット、および256ビットです。他のすべては動作しません。また、キーのエンコーディングが正しいことを確認してください。

ここでの代わりにcreateDecipherivが使用されているのではないかと疑問に思っている場合は、これらの機能を両方のドキュメントと慎重に比較することをおすすめします。 createDecipherは、キーではなくパスワードを要求します。


その他の考慮事項:

ECB modeを使用しないでください。それは決定論的であり、したがって意味的に安全ではありません。少なくともCBCまたはCTRのようなランダム化モードを使用する必要があります。 padding oracle attackのような攻撃が不可能になるように、暗号文を認証する方が良いです。これは、GCMやEAXなどの認証モード、またはencrypt-then-MACスキームで行うことができます。

+0

ありがとうございます。私はECBがIVを取らず、 'createDecipher(アルゴリズム、パスワード)'がパスワードに基づいて独自のキーを作成することを発見した後、同じ方法で解決しました。 – avck

0

AES-256-ECBとデータを復号化(私はCBCまたは他のモードが表示されません。)。

PKCSパディングを使用する場合はdecipher.setAutoPadding(true)を呼び出します。

関連する問題