Javascript ( pidCrypt AES CBC )を使用して短い文字列を暗号化し、 PHP ( phpseclib Crypt_AES CBC ) を使用して復号化する必要があります。
さまざまなライブラリ間に非常に多くの非互換性があり (それらの多くを試しましたが、ドキュメントが不足しているため使用を開始できなかったものもあります)、それらを理解し、克服しようとして頭を悩ませています (現在の「標準」は単に互換性がありません)。デバッグをカバーしておらず、意味不明または単にfalse
間違った使用法で a が返されます)。
pidCrypt AES CBC は、OpenSSL 互換のエンコーディングを使用していると述べています。
これまでのところ、pidCrypt からの出力が phpseclib で復号化されない理由がわかりません。
pidCrypt
var aes=new pidCrypt.AES.CBC();
aes.encryptText("abcdefg", "secret", {nBits: 128});
console.log(aes.pidcrypt.getParams());
/**
A0_PAD: true
UTF8: true
blockSize: 16
clear: true
dataIn: "abcdefg"
dataOut: "U2FsdGVkX19p8dJctoZSgamat+UBHMWM/Zx64fBDYJY="
decryptIn: ""
decryptOut: ""
encryptIn: Array[16]
encryptOut: "©·åÅýzáðC`"
iv: "e314f8ebbcc5a1e0ae6c27033dd6725f"
key: "49f9bd99b7952b68b3bfa47404455fa7"
nBits: 128
salt: "69f1d25cb6865281"
*/
phpseclib
function hex2raw($strHexString)
{
$strRawBytes="";
$arrChunks=str_split($strHexString, 2);
for($i=0; $i<count($arrChunks); $i++)
$strRawBytes.=chr(hexdec($arrChunks[$i]));
return $strRawBytes;
}
require_once("Crypt/AES.php");
$aes=new Crypt_AES(CRYPT_AES_MODE_CBC);
$aes->setPassword("secret");
$aes->setIV(hex2raw("e314f8ebbcc5a1e0ae6c27033dd6725f"));
var_export($aes->decrypt(base64_decode("U2FsdGVkX19p8dJctoZSgamat+UBHMWM/Zx64fBDYJY=")));
/**
false
*/
phpseclib AES CBC モードの "Key Derivation: None" の例 (setPassword の代わりに setKey と setIV) も試しましたが、結果は同じでした。
phpseclib で上記の pidCrypt AES CBC 出力をデコードするにはどうすればよいですか?
また
上記の pidCrypt 出力を復号化できる phpseclib の代替手段はありますか (コード API があります。OpenSSL の使用例は許可されていません)。
Javascript セキュリティとネットワーク セキュリティに関する講義はご遠慮ください。これは、インターネット/ネットワーク スニッフィングから保護するためのものではありません。