小弟这样加密可以解吗???

2019-12-02 22:15:57 +08:00
 lysS
<?php
header('Content-type:text/html;charset=utf-8');
$order_name='卧槽';
$orderName=mb_substr(md5(mb_substr(md5(mb_substr(md5($order_name),0,15)),3,19)),0,8);

echo $orderName; //0e907f4a
?>

不太懂加密这方面的东西,假如知道了足够多的$oredr 和$order_my 之间的对应关系,能不能解出来喃?? 当然对方已经知道$order_name 的值,相同的$order_name 出来的值是一样的,所以他们能够猜到用来 md5 之类的方法。。

1833 次点击
所在节点    问与答
10 条回复
mouyase
2019-12-02 22:25:15 +08:00
md5 是检验方法不是加密方法,并不可逆
geelaw
2019-12-02 22:27:25 +08:00
如果你的算法里面没有随机数,那么任何人都可以完美复现你的算法,因为从来不假设别人看不见你的代码。
eason1874
2019-12-02 22:33:35 +08:00
加盐就行了。

md5($orderName . '这里搞一串字符当密钥')
ryd994
2019-12-02 22:38:12 +08:00
加盐也不行。md5 是已经被宣布不安全的算法。md5 从设计之初就是散列算法,目的是快速校验或打散数据。从来就不是按密码保存算法设计的。
保存密码,你需要的是 kdf: https://zh.wikipedia.org/wiki/%E5%AF%86%E9%92%A5%E6%B4%BE%E7%94%9F%E5%87%BD%E6%95%B0
lysS
2019-12-02 23:00:57 +08:00
@geelaw 加了个随机数那我也不知道是啥了。。
yejinmo
2019-12-02 23:17:37 +08:00
你这样算订单号可能会出现碰撞的
agdhole
2019-12-02 23:24:33 +08:00
密码是门学科,不要闭门造车
lysS
2019-12-03 09:29:40 +08:00
@yejinmo 前面还要 13 位的时间戳
Lostars
2019-12-03 09:42:47 +08:00
选非对称加密吧,用强度足够的密钥,毕竟数字货币钱包都在用。
killerv
2019-12-03 11:11:16 +08:00
md5 是 hash 不是 encrypt,而且你这样 mb_substr($md5Str, 0, 8) 是有很大几率碰撞的,在自己知识储备不健全的情况下,不要想当然的造轮子。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/625270

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX