如何使用 OpenSSL 在 PHP 中使用 AES-256 CBC 加密明文?
How to encrypt plaintext with AES-256 CBC in PHP using OpenSSL?
我试图在进入数据库之前加密我的 php 支持的网站中的个人消息等敏感用户数据。我在互联网上做了一些研究,发现了一些需要记住的重要事项:
永远不要使用 mcrypt,它是废弃软件。
AES基于Rijndael算法,至今未破
AES 也被 NSA 推荐并用于美国政府的数据加密,但是由于 NSA 推荐它,他们有可能很容易地窃取我的用户数据。
Blowfish 也没有断过,但速度慢且不太受欢迎。
所以,我决定先尝试使用 AES-256 cbc。但我仍然不确定我是否不应该将 Blowfish 视为更好的选择。所以欢迎任何建议。
我最关心的是,如何加密php中的数据?我在 php 文档中找不到关于此的好手册。正确的实现方式是什么?
非常感谢任何帮助。
AES-256(OpenSSL 实施)
你很幸运。
openssl
扩展有一些非常易于使用的 AES-256 方法。您需要采取的步骤基本上是...
- 生成一个 256 位加密密钥(这需要存储在某处)
$encryption_key = openssl_random_pseudo_bytes(32);
- 生成一个"initialization vector"(这也需要存储用于解密,但我们可以将其附加到加密数据中)
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
- 使用
openssl_encrypt()
加密数据
openssl_encrypt($data, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
- 对于默认选项,
$options
可以设置为 0
或更改为 OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
- 将初始化向量附加到加密数据
$encrypted = $encrypted . ':' . $iv;
- 检索加密数据和初始化向量。
explode(':' , $encrypted);
- 使用
openssl_decrypt()
解密数据
openssl_decrypt($encryptedData, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
启用 openssl
默认情况下 openssl_functions()
不可用,您可以通过取消注释行在 php.ini
文件中启用此扩展。 ;extension=php_openssl.dll
通过删除前导 ;
PHP - Fiddle.
我试图在进入数据库之前加密我的 php 支持的网站中的个人消息等敏感用户数据。我在互联网上做了一些研究,发现了一些需要记住的重要事项:
永远不要使用 mcrypt,它是废弃软件。
AES基于Rijndael算法,至今未破
AES 也被 NSA 推荐并用于美国政府的数据加密,但是由于 NSA 推荐它,他们有可能很容易地窃取我的用户数据。
Blowfish 也没有断过,但速度慢且不太受欢迎。
所以,我决定先尝试使用 AES-256 cbc。但我仍然不确定我是否不应该将 Blowfish 视为更好的选择。所以欢迎任何建议。
我最关心的是,如何加密php中的数据?我在 php 文档中找不到关于此的好手册。正确的实现方式是什么?
非常感谢任何帮助。
AES-256(OpenSSL 实施)
你很幸运。
openssl
扩展有一些非常易于使用的 AES-256 方法。您需要采取的步骤基本上是...
- 生成一个 256 位加密密钥(这需要存储在某处)
$encryption_key = openssl_random_pseudo_bytes(32);
- 生成一个"initialization vector"(这也需要存储用于解密,但我们可以将其附加到加密数据中)
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
- 使用
openssl_encrypt()
加密数据openssl_encrypt($data, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
- 对于默认选项,
$options
可以设置为0
或更改为OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
- 将初始化向量附加到加密数据
$encrypted = $encrypted . ':' . $iv;
- 检索加密数据和初始化向量。
explode(':' , $encrypted);
- 使用
openssl_decrypt()
解密数据openssl_decrypt($encryptedData, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
启用 openssl
默认情况下openssl_functions()
不可用,您可以通过取消注释行在 php.ini
文件中启用此扩展。 ;extension=php_openssl.dll
通过删除前导 ;