<?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 之类的方法。。
1
mouyase 2019-12-02 22:25:15 +08:00 via Android
md5 是检验方法不是加密方法,并不可逆
|
2
geelaw 2019-12-02 22:27:25 +08:00 via iPhone
如果你的算法里面没有随机数,那么任何人都可以完美复现你的算法,因为从来不假设别人看不见你的代码。
|
3
eason1874 2019-12-02 22:33:35 +08:00 via Android
加盐就行了。
md5($orderName . '这里搞一串字符当密钥') |
4
ryd994 2019-12-02 22:38:12 +08:00 via Android
加盐也不行。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 |
6
yejinmo 2019-12-02 23:17:37 +08:00
你这样算订单号可能会出现碰撞的
|
7
agdhole 2019-12-02 23:24:33 +08:00
密码是门学科,不要闭门造车
|
9
Lostars 2019-12-03 09:42:47 +08:00
选非对称加密吧,用强度足够的密钥,毕竟数字货币钱包都在用。
|
10
killerv 2019-12-03 11:11:16 +08:00
md5 是 hash 不是 encrypt,而且你这样 mb_substr($md5Str, 0, 8) 是有很大几率碰撞的,在自己知识储备不健全的情况下,不要想当然的造轮子。
|