7
回答
php怎么写能加密成固定位数(类似md5)的函数,还能解密?
【腾讯云】学生服务器套餐10元/月 >>>   

请问怎么用php写能加密成固定位数的函数,并且还能解密?md5主要是不可逆,base64加密后的字符串太长,还不固定位数。

补充:其实就是加密淘宝的图片地址,比如这样的http://g.search.alicdn.com/img/bao/uploaded/i4/i2/19548019265873186/T1NBAWXaRXXXXXXXXX_!!0-item_pic.jpg_210x210.jpg ,不一定要固定位数,但不能太长。

<无标签>
举报
鹏鹏鸟
发帖于5年前 7回/842阅
共有7个答案 最后回答: 5年前

很难实现,固定位数代表他的可能性就那么多,但是你的源的位数不固定,就代表可能性也是不固定的

除非你的源的位数一直都笔你加密出来的位数小
--- 共有 1 条评论 ---
鹏鹏鸟其实就是加密淘宝的图片地址,比如这样的:http://g.search.alicdn.com/img/bao/uploaded/i4/i2/19548019265873186/T1NBAWXaRXXXXXXXXX_!!0-item_pic.jpg_210x210.jpg 5年前 回复
神都不可能办得到的事.
--- 共有 4 条评论 ---
鹏鹏鸟回复 @小耶果 : 呵呵,我就是想搞个能加密解密的,因为我网站的图片是实时调用其他网站的,目前有近千万张,每次更新还在不断增加,就想找个一个很好的解决方案,你看下这个帖子:http://www.oschina.net/question/1256206_125220 5年前 回复
南湖船老大回复 @小耶果 : 他打破了能量守恒定理 5年前 回复
小耶果回复 @鹏鹏鸟 : 如果LZ的意思是一个函数f(x)=r,x是任意长度,任意内容的待处理数据,r是输出结果,我们暂不管r的长度,只有确定对于任意输入内容的x,得到的r始终是固定长度的结果.且存在-f(r)=x,当你设计出这个f时并调试成功,那么此时人类,包括一切生物,地球都会灰飞烟灭,宇宙开始塌陷.因为你动摇了这个世界存在的基础规则之一,整个世界已经没有存在的依据了. 5年前 回复
鹏鹏鸟原来我的想法太苛刻了 5年前 回复

这个需求有点奇怪,可能你想的解决方案未必就是真正需要的

一个变通的方案就是获得用户数据后,你存入数据库,并创建一个KEY,加盐也好,不加盐也好,使用SHA1或者MD5或者其它哈希函数生成。并把这个KEY传回给用户,下次你就使用这个KEY来读取数据库的信息了。当然本质上这和数字主键没多大区别,只是用户不太有希望从KEY重猜测别的KEY的值

--- 共有 4 条评论 ---
鹏鹏鸟回复 @西瓜回路遮断器 : 好的 谢谢了 5年前 回复
西瓜回路遮断器回复 @鹏鹏鸟 : 我想我应该已经把思路描述的很清楚了。至于你补充上去的这个需求的话,Base64就已经做得足够好了,还担心什么 5年前 回复
鹏鹏鸟能给我个思路吗?这篇帖子的提问里我详细说明了:http://www.oschina.net/question/1256206_125220,谢谢了。 5年前 回复
鹏鹏鸟是,主要是为了解决海量图片的问题,因为我网站的图片都是在访问时实时调用其他大型网站的,想把原始地址的url加密后放在自己的图片url中,然后在用户访问的时候能还原。 5年前 回复

用短网址吧...源码在此

$host = "126.am/"; //网易短网址
$url="http://www.5umao.com/imgs/c-50103018-03defd4c00bc654561c9b5e4f3bc0150.jpg";
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,"http://".$host."short.action");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$data=array('json'=>json_encode(array('urls'=>array(array("url"=>$url)))));
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$r=curl_exec($ch);
curl_close($ch);
$r=json_decode($r,true);

$img=str_replace($host,"",$r['shortUrls'][0]['url']); //得到图片地址

//echo $img; //输出字符串 hUVOa4,该字符串可以作为图片文件名

//读取并输出图片
header("Content-type:image/jpeg");
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"http://".$host."$img");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
echo curl_exec($ch);
curl_close($ch);
这个应该符合你的需求了...

--- 共有 1 条评论 ---
苏生不惑不错 5年前 回复
顶部