加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 加密数字URL参数,结果不应超过原始值

发布时间:2020-12-13 22:03:16 所属栏目:PHP教程 来源:网络整理
导读:我必须加密特定的URL参数.如果我希望输出低于6-7个字符,我应该使用什么算法? 输入是整数,范围从1到1,000,000. 解决方法 如果您需要加密并且需要尽可能短的结果,则必须使用流密码. Blowfish(您之前使用过的)是一个阻塞程序,结果将始终具有一个块的最小大小.
我必须加密特定的URL参数.如果我希望输出低于6-7个字符,我应该使用什么算法?

输入是整数,范围从1到1,000,000.

解决方法

如果您需要加密并且需要尽可能短的结果,则必须使用流密码. Blowfish(您之前使用过的)是一个阻塞程序,结果将始终具有一个块的最小大小.

在PHP manual on mcrypt中找到comparison of stream ciphers on Wikipedia和支持的密码列表

此外,加密的结果可能包含特殊字符,因此当将其作为参数放入URL时,您应该使用urlencode()或base64_encode()

使用urlencode()或base64_encode()将扩展您的字符串,使其比原始数据更长.这对于使传输/ URL安全是必要的.

但是,由于您的输入始终是数字,因此您可以使用base_convert()来缩短输入.在解码方面,你必须做同样的事情.

为了获得更短的结果,您可以使用enminicode() / deminicode() function provided by Aron Cederholm而不是使用base_convert().

下面是使用RC4流密码(顺便说一下,它不是很强)和从基数10到基数36的转换的例子.

注意:此示例仅适用于数字,因此使用base_convert()缩小输入字符串!

function my_number_encrypt($data,$key,$base64_safe=true,$shrink=true) {
        if ($shrink) $data = base_convert($data,10,36);
        $data = @mcrypt_encrypt(MCRYPT_ARCFOUR,$data,MCRYPT_MODE_STREAM);
        if ($base64_safe) $data = str_replace('=','',base64_encode($data));
        return $data;
}

function my_number_decrypt($data,$expand=true) {
        if ($base64_safe) $data = base64_decode($data.'==');
        $data = @mcrypt_encrypt(MCRYPT_ARCFOUR,MCRYPT_MODE_STREAM);
        if ($expand) $data = base_convert($data,36,10);
        return $data;
}

$data = "15231223";
$key = "&/ASD%g/..&FWSF2csvsq2we!%%";

echo "data: ","n";
$encrypted = my_number_encrypt($data,$key);
echo "encrypted: ",$encrypted,"n";
$decrypted = my_number_decrypt($encrypted,$key);
echo "decrypted: ",$decrypted,"n";

结果:

data: 15231223
encrypted: BuF3xdE
decrypted: 15231223

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读