如何使用OpenSSL在PHP中使用AES-256 CBC加密明文?

时间:2016-01-19 08:15:55

标签: php cryptography aes php-openssl

我想在进入数据库之前加密敏感的用户数据,比如我的php网站中的个人消息。我在互联网上研究了一下,我发现了一些要记住的重要事项:

  1. 永远不要使用mcrypt,它放弃了软件。

  2. AES基于Rijndael算法,至今尚未完整。

  3. AES也被NSA推荐并用于美国政府数据加密,但由于NSA推荐它,他们有可能轻松地偷偷摸摸我的用户数据。

  4. Blowfish也没有中断,但速度慢且不太受欢迎。

  5. 所以,我决定先用AES-256 cbc试一试。但我仍然不确定我是否不应该认为Blowfish是一个更好的选择。所以欢迎任何建议。

    我主要担心的是,如何加密php中的数据?我在php文档中找不到关于此的好手册。实现它的正确方法是什么?

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:14)

AES-256(OpenSSL实施)

你好运。

openssl扩展程序有一些非常容易使用的AES-256方法。您需要采取的步骤基本上是......

  1. 生成256位加密密钥(这需要存储在某处)
    • $encryption_key = openssl_random_pseudo_bytes(32);
  2. 生成"初始化向量" (这也需要存储解密,但我们可以将其附加到加密数据)
    • $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
  3. 使用openssl_encrypt()加密数据
    • openssl_encrypt($data, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
    • $options可以设置为0默认选项或更改为OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
  4. 将初始化向量附加到加密数据
    • $encrypted = $encrypted . ':' . $iv;
  5. 检索加密数据和初始化向量。
    • explode(':' , $encrypted);
  6. 使用openssl_decrypt()解密数据
    • openssl_decrypt($encryptedData, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
  7. 启用openssl

    openssl_functions()默认情况下无法使用,您可以通过取消注释该行,在php.ini文件中启用此扩展程序。 ;extension=php_openssl.dll删除了前导;

    PHP - 小提琴。

    http://phpfiddle.org/lite/code/9epi-j5v2