【发布时间】:2020-07-28 05:30:49
【问题描述】:
我正在使用 AES 256 cbc 方法来加密我的文件。 我正在加密的列称为“名称”。 之前在加密之前,我在 phpmyadmin 中将 'Name' 的 varchar 长度设置为 20。当我尝试加密时,我发现它很短,并且整个加密字符串没有插入到数据库中。 所以我将 varchar 的大小更改为 50,但长度仍然很小。 我也必须为其他专栏这样做。如何确定“名称”列的有效长度。
我在加密中使用了随机 IV,如下例所示。
$encryptionMethod = "AES-256-CBC";
$secretHash = "25c6c7ff35b9979b151f2136cd13b0ff";
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($encryptionMethod));
//To encrypt
$encrypted = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash,false,$iv);
$encryptedMessage = $encrypted . ':' .base64_encode($iv);
在解密期间我使用
$parts = explode(':', $encryptedMessage);
// Decrypt the data
$decryptedMessage = openssl_decrypt($parts[0], $encryptionMethod, $secretHash, 0, base64_decode($parts[1]));
echo $decryptedMessage;
由于 IV 已附加到加密字符串,我将如何计算需要在数据库中为“名称”列定义的长度。
【问题讨论】:
-
echo strlen($encrypted);说什么? ...此外,由于看起来长度将取决于您的$text变量,这是固定长度吗?如果不是,您的数据库不应该使用 TEXT 或 BLOB 数据类型吗? -
@GetSet 是的,即使长度取决于 $text。我的“名称”列的 $text 是 20 个字符的预加密。由于名称通常包含 20 个字符。所以如果是这样的话,我不应该只计算加密后的名称长度,因为预长度小于 20 个字符吗?并将该值放入数据库中?
标签: php mysql encryption aes