我正在尝试加密和解密一个值。我的例子有时会起作用,但我得到的大部分时间都是:
openssl_decrypt():传递的IV长度为20个字节,长度超过 16选择密码预期,截断
这是我的两种方法:
加密
public function encrypt(string $value)
{
$iv = random_bytes(16);
$encrypted = openssl_encrypt($value, $this->cipher, $this->key, 0, $iv);
return base64_encode($encrypted . '/' . $iv);
}
解密
public function decrypt(string $payload)
{
$payload = base64_decode($payload);
list($payload, $iv) = explode('/', $payload);
$decrypted = openssl_decrypt($payload, $this->cipher, $this->key, 0, $iv);
return $decrypted;
}
解密后,$iv
变量的长度发生了变化。谁能告诉我为什么会这样?每当我转储随机字节输出时,我有时会得到无法呈现的奇怪字符。
有人能指出我正确的方向,所以我可以解决这个问题吗?
干杯。