我有这段代码:
<?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>';
?>
此代码背后的想法是加密要在URL上使用的数据。所以,我期待输出哪个URL友好。我的意思是,它只包含字母数字字符。但是当我使用这个openssl_encrypt
函数时,我会得到奇怪的字符,我不认为它是URL友好的。
它产生如下输出:
^‘-7Ⱦ®l¿ô¾áÙ
如何从openssl_encrypt
生成URL友好字符?谢谢
答案 0 :(得分:7)
这个问题被问了很多,用不同的单词选择(这使得很难说“只搜索它!”)。这个事实促使了一篇名为The Comprehensive Guide to URL Parameter Encryption in PHP 的博客文章。
通常,人们希望使用 short 随机查找的URL。这并没有太多空间来encrypt then authenticate您要混淆的数据库记录ID。这样做将要求URL的最小长度为32个字节(对于HMAC-SHA256),以base64编码时为44个字符。
一种更简单的策略是生成一个随机字符串(请参见random_compat(有关random_bytes()
的PHP5实现和random_int()
的生成这些字符串的PHP5)并引用该列。
如果必须加密数据(非常不推荐),请不要使用自主设计(尤其是unauthenticated CBC mode)。使用trustworthy library instead。
加密工作后,请确保密文使用hex or base64url encoding。