社区
基础编程
帖子详情
用php 的MD5函数生成md5值的重复几率有多大?
dreamfly_whj
2006-06-17 11:34:19
用php 的MD5函数生成md5值的重复几率有多大?
厌倦了应用id 自增长的1,2,3...... 这样的规律,想用md5值作为信息索引?
不知道我这个想法如何?可靠与否?
...全文
1651
10
打赏
收藏
用php 的MD5函数生成md5值的重复几率有多大?
用php 的MD5函数生成md5值的重复几率有多大? 厌倦了应用id 自增长的1,2,3...... 这样的规律,想用md5值作为信息索引? 不知道我这个想法如何?可靠与否?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dreamfly_whj
2006-06-30
打赏
举报
回复
谢谢各位的赐教~!
shuzai
2006-06-20
打赏
举报
回复
把 0-9 a-z 的各种32位长度的组合字符串md5一次.
然后随便在一个32位的字符串多加一位来md5,就有重复了 :D
lantersen
2006-06-20
打赏
举报
回复
md5算法原理
1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果是448。
即数据扩展至K*512+448位。即K*64+56个字节,K为整数。
具体补位操作:补一个1,然后补0至满足上述要求
2、补数据长度:
用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据就被填
补成长度为512位的倍数。
3. 初始化MD5参数
四个32位整数 (A,B,C,D) 用来计算信息摘要,初始化使用的是十六进制表示的数字
A=0X01234567
B=0X89abcdef
C=0Xfedcba98
D=0X76543210
4、处理位操作函数
X,Y,Z为32位整数。
F(X,Y,Z) = X&Y|NOT(X)&Z
G(X,Y,Z) = X&Z|Y¬(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X|not(Z))
5、主要变换过程:
使用常数组T[1 ... 64], T[i]为32位整数用16进制表示,数据用16个32位的整
数数组M[]表示。
具体过程如下:
/* 处理数据原文 */
For i = 0 to N/16-1 do
/*每一次,把数据原文存放在16个元素的数组X中. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /结束对J的循环
/* Save A as AA, B as BB, C as CC, and D as DD. */
AA = A
BB = B
CC = C
DD = D
/* 第1轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* 第2轮* */
/* 以 [abcd k s i]表示如下操作
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/* 第3轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/* 第4轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
/* 然后进行如下操作 */
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /* 结束对I的循环*/
6、输出结果。
xuzuning
2006-06-19
打赏
举报
回复
MD5函数生成md5值的重复几率有多大?
≈0
想用md5值作为信息索引?
可以,但是占用空间比较大,请注意
在数据库中使用自增id可以确保记录的唯一性,但是md5是不可以的。
请注意到这个事实:尽管md5在绝大多数情况下能保证唯一性,但相同的量有相同的md5值
所以你仍然需要提供一个唯一的值给md5。这样就绕回去了!
md5(uniqid(rand(), true));
不能保证唯一性,因为rand()返回的是平均分布的随机数,概率为1
-神仙-
2006-06-18
打赏
举报
回复
这有什么好厌倦的
用md5除了浪费空间,降低速度,一点好处也没有
iasky
2006-06-18
打赏
举报
回复
自动增长很不错啊,节约空间,方便index
aniude
2006-06-18
打赏
举报
回复
md5(uniqid(rand(), true)); 方法不错
beloved
2006-06-18
打赏
举报
回复
ID之所以采用整数是有原因的,是为了索引方便,你如果真厌倦了,而想换的话你可以换UID啊。那是唯一的。
MD5也是有碰撞的,我记得上次山东大学还是那个高校写了一个算法用大型机算出了两个碰撞来着。
黑夜路人(heiyeluren)
2006-06-18
打赏
举报
回复
不过如果你是为了防止别人偷数据而采用md5的话,只能是个简单的解决办法,防抓取和盗链,还是要从Web Server上去入手。。。
黑夜路人(heiyeluren)
2006-06-18
打赏
举报
回复
同意楼上。
你自己尝试使用PHP去实现简单的文件系统操作去看看,呵呵。
md5(uniqid(rand(), true)); 生成md5值的几率非常小,毕竟是按照microtime级的来生成滴
php
生成
不
重复
6位数字写入数据库,怎样
生成
数据库中不
重复
的固定位数的数字?...
本文探讨了如何高效地
生成
不
重复
的8位数字UID,避免传统查询验证的耗时方法。建议使用时间戳结合微秒或
MD5
等方法确保唯一性。此外,还提到了在
PHP
中利用MySQL自增ID或时间戳配合其他随机
值
生成
有序或无序的唯一标识。对于并发注册场景,提出了利用锁机制或更新策略来防止冲突。
使用
PHP
生成
通用唯一识别码(UUID)
UUID即通用唯一识别码,能让分布式系统元素有唯一辨识信息,无需中央控制端指定。它由32位16进制数字构成,
重复
几率
极低。Java、Python有专门库
函数
生成
UUID,
PHP
也可通过第三方库
生成
,先require自动加载文件,再调用UUID方法。
PHP
生成
不
重复
标识符的方法
本文介绍了几种用于避免图片上传时文件名
重复
的方法,包括GUID、
MD5
、uniqid及自定义UUID等,并提出了一种结合用户ID、时间和随机数的最终解决方案。
php
旧物交易开源代码_代码收藏系列--
php
--
生成
简短唯一订单号
本文介绍了一种
生成
不
重复
商家交易单号的方法及压缩
MD5
为32进制8位字符的技术方案。通过时间戳与
MD5
签名组合确保交易号的唯一性,并讨论了不同场景下的应用。
think
php
5 mysql uuid_
PHP
简单
生成
通用唯一识别码(UUID)
本文介绍了UUID的特性,如何通过Composer安装并使用ramsey/uuid库在
PHP
中
生成
不同版本的UUID,包括version 1(时间基)、version 3(基于DNS和
MD5
)、version 4(随机)和version 5(基于DNS和SHA1)。这些UUID可用于产品序列号、文件路径、图片命名和订单号等多种场景。
基础编程
21,889
社区成员
140,337
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章