我有这个代码:
<?php
$key = 'thisisakey';
$iv = '1234567812345678';
$plaintext = 'Hello World';
$ciphertext = openssl_encrypt($plaintext, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
echo $ciphertext . '<br>';
$plaintext = openssl_decrypt($ciphertext, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
echo $plaintext . '<br>';
?>
Run Code Online (Sandbox Code Playgroud)
此代码背后的想法是加密要在URL上使用的数据.所以,我期待输出哪个URL友好.我的意思是,它只包含字母数字字符.但是当我使用这个openssl_encrypt函数时,我得到了奇怪的字符,我不认为URL友好.
它产生这样的输出:
^‘-7Ⱦ®l¿ô¾áÙ
Run Code Online (Sandbox Code Playgroud)
如何生成URL友好字符openssl_encrypt?谢谢
这个问题已经被问了很多,用不同的单词选择(这使得很难说,"只是搜索它!").这个事实引发了一篇名为"PHP参考文献加密综合指南 "的博客文章.
通常,人们想要看起来短随意的URL.这不允许您有足够的空间加密,然后验证您希望混淆的数据库记录ID.这样做的最小URL长度为32字节(对于HMAC-SHA256),在base64中编码时为44个字符.
一个更简单的策略是生成一个随机字符串(请参阅random_compat以获取PHP5实现random_bytes()和random_int()生成这些字符串)并引用该列.
如果必须加密数据(非常不推荐),请不要使用自行开发的设计(尤其是未经身份验证的CBC模式).请使用值得信赖的库.
加密工作后,请确保密文使用hex或base64url编码.