PHP Openssl加密URL的数据

Sai*_*son 0 php encryption

我有这个代码:

<?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?谢谢

Sco*_*ski 7

这个问题已经被问了很多,用不同的单词选择(这使得很难说,"只是搜索它!").这个事实引发了一篇名为"PHP参考文献加密综合指南 "的博客文章.

人们想要做什么

某些加密函数用于确定性地检索ID

人们应该做些什么

使用单独的列

说明

通常,人们想要看起来随意的URL.这不允许您有足够的空间加密,然后验证您希望混淆的数据库记录ID.这样做的最小URL长度为32字节(对于HMAC-SHA256),在base64中编码时为44个字符.

一个更简单的策略是生成一个随机字符串(请参阅random_compat以获取PHP5实现random_bytes()random_int()生成这些字符串)并引用该列.

如果加密不可协商怎么办?

如果必须加密数据(非常不推荐),请不要使用自行开发的设计(尤其是未经身份验证的CBC模式).请使用值得信赖的库.

加密工作后,请确保密文使用hex或base64url编码.