4

私は次のPHP関数と同等のことをしようとしています

openssl_private_encrypt

秘密鍵を使用して文字列に署名する

これが私がしていることです

var signer = crypto.createSign('RSA-SHA256').update(timestamp + '|' + userId);
var signature = signer.sign(privKey, 'base64');

私の最初の質問は、RSAとSHA256を組み合わせるとどういう意味ですか?RSA秘密鍵を使用して暗号化すること、またはSHA256を使用してハッシュすることの意味を理解しています。しかし、私はそれらの2つを一緒にすることの意味を理解することはできません。

createSignには文字列パラメータが必要であり(「RSA」はサポートされていません)、RSA-SHA256が最も近いものであるため、ここに配置しました。

私の2番目の質問はどうすればいいですか

openssl_private_encrypt

Node.jsで?

4

1 に答える 1

3

通常の署名操作はハッシュ計算で構成され、(関数で必要な場合) 秘密鍵によって暗号化されます。ハッシュは、重複するハッシュ (衝突) が見つからないメッセージの圧縮された (より小さい) 表現です。RSA の場合、メッセージは PKCS#1 v2.1 (公開標準) にあるスキームを使用してパディングされ、その後べき乗剰余が実行されます。

剰余累乗は、暗号化と誤って呼ばれることが多く、暗号化には RSA 用の別のパディング方法が必要です (また、暗号化ではハッシュも実行されません)。

文字列の署名には使用openssl_private_encryptしないでください。これは非推奨の関数であり、主に比較的特定の認証目的で必要です。単独で使用すると、署名に使用されるパディングを使用してデータを暗号化しますが、ハッシュとハッシュ インジケーターは除外されます。

に相当するものを作成するopenssl_private_encryptには、PKCS#1 v1.5 パディング メソッドとべき乗剰余を実行できる必要があります。これらの関数は Node.js のソース コードから取得できる可能性がありますが、より高いレベルの API でそれらを見つけることはまずありません。openssl_private_encryptただし、PHP の関数を廃止して、より高いレベルの署名関数を使用することをお勧めします。

于 2013-03-15T01:17:20.230 に答える