我必须加密特定的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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。