【发布时间】:2016-04-15 01:28:09
【问题描述】:
我在命令行上使用 OpenSSL 加密 JSON 对象。但是,当我使用 cURL 发送它然后尝试解密它时,我只会得到不可打印的字节。这是我的过程:
在 OpenSSL 中加密
openssl aes-128-cbc -in object.json -out cipher.txt -pass pass:key.file -base64
cat object.json
{"payload":"这是一个测试"}猫密钥文件
KWA6HNqb9UydXPbh72Vej82rT7NMVQZE猫密码.txt U2FsdGVkX1/OOX/XSRXXOCmxfak5TXbagG6ZSW6U95U+VLADuaH83zmP8hee017J
key.file 正好是 32 个字节。我有相同的 key.file 驻留在服务器上。我已经验证它也是32字节。
使用 cURL 发送
curl --data "@cipher.txt" http://www.example.com/myscript.php
php 脚本
$key = file_get_contents("key.file");
echo $key . "\n";
// get the ciphertext from the POST parameter
$ciphertext = rawurlencode(file_get_contents("php://input"));
echo $ciphertext . "\n";
echo base64_decode(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_CBC));
这是我返回的结果:
KWA6HNqb9UydXPbh72Vej82rT7NMVQZE U2FsdGVkX1%2FOOX%2FXSRXXOCmxfak5TXbagG6ZSW6U95U%2BVLADuaH83zmP8hee017J
���G�/
我看不出我做错了什么。谁能告诉我我在哪里犯了错误?谢谢!
编辑 我也试过用这个命令解密,结果却得到一个空字符串:
echo base64_decode(openssl_decrypt($ciphertext, "AES-128-CBC", $key, OPENSSL_RAW_DATA));
【问题讨论】:
-
您是否尝试过改用openssl_decrypt?
-
是的。我只是得到一个空字符串作为解密结果。我将编辑我的帖子以显示这一点。好建议。谢谢!
-
嗯。另一个想法,您是否尝试过在加密后对数据进行 base64 编码,以便将其传递给脚本而不会出现任何可能的错误?从
cat的结果来看,这可能是个问题。
标签: php curl encryption