CakePHP 3.2中的安全::encrypt()方法返回无效字符

yrefmtwq  于 2022-11-12  发布在  PHP
关注(0)|答案(1)|浏览(98)

我在CakePHP 3.2中使用Security实用工具进行加密和解密。
Security::encrypt('string', 'key')//密钥长度为32或更长
方法对字符串进行加密时,它将返回包含一些无效字符的加密字符串,如下所示:
第一章:介绍了一种基于FPGA的数字信号处理器的设计方法。% N
我想在url中使用这个字符串。但是它没有像预期的那样工作,因为有一些无效的字符。
现在我想避开这些人物,有没有办法避开这些人物呢?

ylamdve6

ylamdve61#

Security::encrypt()返回二进制数据,您所看到的内容没有任何无效的内容。
如果你需要一个URL安全字符串,那么你可以使用Base64编码作为 basis。但是,这也需要注意Base64中可能出现的URL不安全字符,即+/=

// encode
$base64String = base64_encode($encryptedBinaryData);
$urlSafeString = str_replace(['+', '/', '='], ['-', '_', '~'], $base64String);

// decode
$base64String = str_replace(['-', '_', '~'], ['+', '/', '='], $urlSafeString);
$encryptedBinaryData = base64_decode($base64String);

如果您可以接受更多的数据,则可以使用十六进制编码,这是完全URL安全的:

// encode
$urlSafeString = bin2hex($encryptedBinaryData);

// decode
$encryptedBinaryData = hex2bin($urlSafeString);

另请参阅






相关问题