Py学习  »  DATABASE

bash解密存储在MySQL中的文件

Tom • 3 年前 • 367 次点击  

我在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' 但这导致了同样的错误信息。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132017
 
367 次点击