defuse / php-encryption - 同一个密钥在不同的机器上不起作用?

时间:2016-05-23 06:45:09

标签: php security encryption cryptography

我对加密主题很陌生。

我在PHP脚本中需要的是对我需要存储在DB中的值的简单同步加密。所以我已经阅读了几篇教程和帖子,并决定使用defuse / php-encryption。

这种方法似乎很直接

生成密钥并将其用于进一步解密/加密

加密

  1. 使用密钥加密数据
  2. 以DB格式加密存储
  3. 解密

    1. 从DB
    2. 读取加密数据
    3. 使用密钥
    4. 解密
    5. 享受纯文本的乐趣
    6. 我从中下载了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上生成一个新密钥 - 它可以工作。但这会留下一种非常不安的感觉,因为我必须能够在任何机器上使用相同的密钥解密数据。

      如果有一天服务器崩溃,我将不得不在另一台机器上恢复数据,在解密时会遇到如此错误的错误 - 我将注定失败: - )

      我肯定做错了什么。我可以使用你能提供的任何建议。

      感谢

0 个答案:

没有答案