开发者社区> 问答> 正文

php怎么写能加密成固定位数(类似md5)的函数,还能解密?:报错

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

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

展开
收起
kun坤 2020-06-09 22:21:08 860 0
1 条回答
写回答
取消 提交回答
  • 很难实现,固定位数代表他的可能性就那么多,但是你的源的位数不固定,就代表可能性也是不固定的

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

    引用来自“小耶果”的答案

    神都不可能办得到的事.
    大神都不可能办得到的事.
    ######

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

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

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

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

    $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);
    这个应该符合你的需求了...

    ######不错######

    直接XOR~

    2020-06-09 22:21:13
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发_从白帽角度做安全 立即下载
PHP在机器学习上的应用及云深度学习平台的架构设计与实现 立即下载
量子加密通信技术 立即下载