我在MySQL表中存储了一个xls文件,在保存之前我已经对它进行了加密。
该文件使用PHP加密:
$key='------------'; // not the real key or iv.
$iv = "*********";
$file = file_get_contents('original.xls');
$file = openssl_encrypt($file, "AES-256-CBC", $key, 0, $iv);
然后插入到现有的MySQL表中。
在PHP中,我可以使用select语句下载它,然后使用相同的密钥解密并保存如下:;四:
$file = openssl_decrypt($file, "AES-256-CBC", $key, 0, $iv);
file_put_contents('downloaded.xls', $file);
我现在正试图通过bash脚本实现同样的功能。
通过以下方式从MySQL读取加密数据:
xls=$(mysql -N -u root --password=1234 test -e "SELECT foo FROM bar where id = '1'")
然后我尝试使用以下方法解密并保存它:
key='------------'
iv = "*********"
ivHex=$(printf "%s" "$iv" | hexdump -ve '/1 "%x"')
keyHex=$(printf "%s" "$key" | hexdump -ve '/1 "%x"')
file=$(echo -n $xls| openssl aes-256-cbc -d -a -A -K $keyHex -iv $ivHex)
echo $file > bash.xls
不幸的是,这会导致错误“
命令替换:忽略输入中的空字节
“,文件已保存,但比原始文件小且已损坏。
如果我在MySQL数据库中使用纯文本,那么我可以使用php或bash下载并解密它。
有人能告诉我是什么原因造成的,以及我如何解决它吗?
谢谢
我应该说我试过使用
tr -d '\0'
但这导致了同样的错误信息。