我对加密主题很陌生。
我在PHP脚本中需要的是对我需要存储在DB中的值的简单同步加密。所以我已经阅读了几篇教程和帖子,并决定使用defuse / php-encryption。
这种方法似乎很直接
生成密钥并将其用于进一步解密/加密
加密
解密
我从中下载了defuse / php-encryption库的v2 https://github.com/defuse/php-encryption/releases
生成密钥
Key::createNewRandomKey();
echo $key->saveToAsciiSafeString();
存储它 - 用于测试 - 直接在我的PHP脚本的getKey()
方法中。
我像这样加密/解密
Crypto::encrypt($plainText, Key::loadFromAsciiSafeString($key));
Crypto::decrypt($encryptedText, Key::loadFromAsciiSafeString($key));
只要我留在我的机器上,就像魅力一样。
不幸的是,当我切换到我的Mac笔记本电脑并运行相同的代码 - 使用相同的密钥(!)时,我得到一个例外:
PHP致命错误:未捕获的异常 'Defuse \ Crypto \ Exception \ BadFormatException',消息'无效 头“。在 药业://classes/encryption/defuse-crypto.phar/src/Encoding.php:177
堆栈追踪:
#0 phar://classes/encryption/defuse-crypto.phar/src/Key.php(38): Defuse\Crypto\Encoding::loadBytesFromChecksummedAsciiSafeString('\xDE\xF0\x00\x00', 'c622e3d4793e511...')
如果我在Mac上生成一个新密钥 - 它可以工作。但这会留下一种非常不安的感觉,因为我必须能够在任何机器上使用相同的密钥解密数据。
如果有一天服务器崩溃,我将不得不在另一台机器上恢复数据,在解密时会遇到如此错误的错误 - 我将注定失败: - )
我肯定做错了什么。我可以使用你能提供的任何建议。
感谢