4

暗号化スクリプトを PHP から JavaScript に変換していますが、苦労しています...

node.js 暗号のドキュメントは次のとおりです。

crypto.createCipheriv(algorithm, key, iv)
指定されたアルゴリズム、キー、および iv を使用して、暗号オブジェクトを作成して返します。

PHP openssl-encryptドキュメント:

string openssl_encrypt ( string $data , string $method , string $password [, bool $raw_output = false [, string $iv = "" ]] )

PHP はパスワードand and and ivを使用します。ノードは、IV が使用されていない場合にのみパスワードを使用します。それ以外の場合は、キーivを提供する必要があります。

passwordivの両方を使用している場合、PHP 関数をノードに変換するにはどうすればよいでしょうか。

キーが正確に何を表しているかも不明です...ノードのドキュメントには、パスワードのみが提供されている場合、キーivが計算されると記載されています..これはPHPが行うことですか? もしそうなら、パスワードivを提供するとどうなりますか? パスワードキーとして使用しますか?

4

1 に答える 1

3

PHP ドキュメントのユーザー コメントから、PHP の$passwordパラメータは実際には暗号化キーであり、実際のパスワードではないようです。これは、鍵と初期化ベクトルを使用するか、IV がアルゴリズム的に導出されるパスワードを使用すると述べているOpenSSL docsと一致しているようですが、パスワードと IV を一緒に提供することは決してありません。

例:

<?php echo openssl_encrypt('foobar', 'aes-256-cbc', 'password', false, 'abcdefghijklmnop');
// prints CUigVN+6jU24E2FdfmmmTw==

#!/bin/bash
echo -n foobar | openssl enc -aes-256-cbc -e -K 70617373776F7264 -iv 6162636465666768696A6B6C6D6E6F70 -nosalt -a
// prints CUigVN+6jU24E2FdfmmmTw==

openssl問題は、キーと IV を16 進数で指定する必要があることです。

于 2012-07-03T11:36:49.163 に答える