次のようなPHPプロデューサーからの文字列を期待する受信アプリケーションがあります。
<?php
$shared_secret = 'secret';
$data = 'whatever';
# Newline added for viewing convenience only
echo bin2hex(mcrypt_encrypt(MCRYPT_BLOWFISH, $shared_secret, $data,
MCRYPT_MODE_ECB)) . "\n";
# -> 05c3febb9970204a
?>
レシーバーの交換には費用がかかります。
node.js を使用して別のプロデューサーを構築していますが、JavaScript コードで同じ出力を生成できません。
var data, encrypt, sharedSecret;
sharedSecret = 'secret';
data = 'whatever';
encrypt = function(d) {
var cipher, crypto;
crypto = require('crypto');
cipher = crypto.createCipher('bf-ecb', sharedSecret, '\0\0\0\0\0\0\0\0');
cipher.update(d);
return cipher.final('hex');
};
console.log(encrypt(data));
// -> 35c9801f2afca332
暗号を選択したのは'bf-ecb'
、ECB モードのフグだと思うからです。mcrypt_encrypt の PHP ドキュメントには、IV を省略するとすべての null バイトが使用され、mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB)
8 と回答されると記載されているため、IV として 8 つの null バイトを指定しました。選択'hex'
したのは、PHP'2 と同じ表現を提供すると思うためですbin2hex()
。
PHP コードの出力と一致させるには、JavaScript コードをどうすればよいですか?