gpt4 book ai didi

php - 正确使用 php openssl_encrypt 的方法

转载 作者:可可西里 更新时间:2023-11-01 12:56:24 28 4
gpt4 key购买 nike

我在一个项目中使用密码学,我需要一些关于如何使用 openssl_encryptopenssl_decrypt 的帮助,我只想知道最基本的和正确的做法。这是我到目前为止得到的:

// To encrypt a string

$dataToEncrypt = 'Hello World';

$cypherMethod = 'AES-256-CBC';
$key = random_bytes(32);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cypherMethod));

$encryptedData = openssl_encrypt($dataToEncrypt, $cypherMethod, $key, $options=0, $iv);

然后我存储 $cypherMethod$key$iv 用于解密 $encryptedData . (我们不要详细说明我如何存储这些值,谢谢!)

// To decrypt an encrypted string

$decryptedData = openssl_decrypt($encryptedData, $cypherMethod, $key, $options=0, $iv);

首先,上面的示例代码是如何使用 php openssl_encrypt 的正确示例吗?

其次,我生成 $key$iv 的方法是否正确且安全?因为我一直在阅读, key 应该是加密安全的。

最后,AES-256-CBC 不需要32 字节 值吗?如果是,那么为什么 openssl_cipher_iv_length() 只返回 int(16) 作为长度?不应该是 int(32) 吗?

最佳答案

First off, is the above example code a correct example of how to use php openssl_encrypt?

您对该函数的使用看起来是正确的,但是您可能需要考虑 CBC 以外的操作模式。 CBC 很难正确处理,因为仅以这种模式加密数据就会遭到已知的攻击,例如臭名昭​​著的 CBC bit-flipping attack。 ,这允许攻击者通过修改密文对明文进行有意义的更改。如果可能的话,我会使用像 GCM 这样的经过身份验证的加密模式(看起来像 it's supported in PHP 7.1+ (Example #1) )。

如果您使用 CBC 模式,请查看 Example #2 in the docs .请注意,在加密后,MAC(消息认证码)是在密文上计算并存储的。在解密密文之前需要重新计算这个MAC,如果与存储的MAC不匹配则密文被修改,无效。

Second, is my method to generate the $key and $iv correct and secure? Because I keep on reading, keys should be cryptographically secure.

key 需要使用加密安全的随机数生成器生成。幸运的是,大多数操作系统通过 /dev/urandom 提供了一个开箱即用的工具。 This answer很好地解释了如何在 PHP 中读取 /dev/urandomopenssl_random_pseudo_bytes 应该也是密码安全的,但是有 times when this is not the case .

初始化向量 (IV) 需要是随机的,并且绝不能与相同的 key 重复使用。

Lastly, isn't a 32-byte value required for AES-256-CBC? If yes, then why is it that openssl_cipher_iv_length() returns only int(16) as the length? Shouldn't it be int(32)?

AES 是一种适用于 128 位(16 字节) block 的 block 密码,无论 key 大小如何。

关于php - 正确使用 php openssl_encrypt 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48017856/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com