Php 我必须为数据库中使用AES-256-CBC加密的字符串指定的长度是多少?
我正在使用AES 256 cbc方法加密我的文件。 我正在加密的列称为“Name”。 在加密之前,我在phpmyadmin中将'Name'的varchar长度设置为20。当我尝试加密时,我看到它很短,并且整个加密字符串没有被插入到数据库中。 因此,我将varchar的大小更改为50,但长度仍然很小。 我还得为其他专栏写这篇文章。如何确定“Name”列的有效长度 从下面的例子可以看出,我在加密中使用了随机化IVPhp 我必须为数据库中使用AES-256-CBC加密的字符串指定的长度是多少?,php,mysql,encryption,aes,Php,Mysql,Encryption,Aes,我正在使用AES 256 cbc方法加密我的文件。 我正在加密的列称为“Name”。 在加密之前,我在phpmyadmin中将'Name'的varchar长度设置为20。当我尝试加密时,我看到它很短,并且整个加密字符串没有被插入到数据库中。 因此,我将varchar的大小更改为50,但长度仍然很小。 我还得为其他专栏写这篇文章。如何确定“Name”列的有效长度 从下面的例子可以看出,我在加密中使用了随机化IV $encryptionMethod = "AES-256-CBC"; $secretH
$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被附加到加密字符串中,如何计算需要在数据库中为列“Name”定义的长度。AES的块大小是16字节,因此您需要
- 输入的大小,四舍五入到16的最接近倍数
- 另外,如果输入已经是16的倍数,则PKCS#5填充的块大小为1
- 加上16个字节用于IV
1 AEAD密码,如GCM,通常优于CBC,但显然需要更多空间来存储身份验证哈希。什么是
echo strlen($encrypted)代码>说什么。。。另外,由于长度似乎取决于$text
变量,因此这是固定长度吗?如果不是,您的数据库不应该使用文本或BLOB的数据类型吗?@GetSet yes,即使长度取决于$TEXT。“Name”列的$text是20个字符的预加密。因为名字通常是20个字符。如果是这样的话,我不应该只计算加密后的名称长度,因为预长度小于20个字符吗?然后把这个值放到数据库里?