php – 加密数字URL参数,结果不应超过原始值
我必须加密特定的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()来缩短输入.在解码方面,你必须做同样的事情. 为了获得更短的结果,您可以使用 下面是使用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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |