对文件进行 MD5 hash 算法后,得到一个 字节数组,为了便于通过 URL 进行保存,需要将字节数组转字符串,默认算法在这里 输出的字符串类似:831a3cf0f43dc6b1f12a75fa22ed3bf5,32 位,感觉有点长。
1
congeec 2019-03-06 09:33:25 +08:00
最短字符串怎么定义的?
关键词 hexdigest |
2
SeaRecluse 2019-03-06 09:33:43 +08:00
你取前 6 位或者 8 位就行了,不用存完
|
3
daijinming OP @congeec 10 位左右吧
|
4
lihongjie0209 2019-03-06 09:35:42 +08:00
MD5 消息摘要算法(英语:MD5 Message-Digest Algorithm ),一种被广泛使用的密码散列函数,可以产生出一个 128 位( 16 字节)的散列值( hash value ),用于确保信息传输完整一致。MD5 由美国密码学家罗纳德·李维斯特( Ronald Linn Rivest )设计,于 1992 年公开,用以取代 MD4 算法。
128 位 一个 16 进制可以表示 4 位 128 / 4 = 32 这么看来你只能用更高进制的表示了 |
5
daijinming OP @SeaRecluse 你说的方法有一定道理,可我还是有些担心,毕竟我是用来做小文件的查重,如果重复了怎么办。
|
6
lihongjie0209 2019-03-06 09:38:25 +08:00
更高进制为什么没使用, 参考: https://www.zhihu.com/question/37657503
|
7
rogwan 2019-03-06 09:39:30 +08:00 via Android
键盘上的字符就这么多,64 进制可以了,用于 URL 避免斜杠和等号。
|
8
SeaRecluse 2019-03-06 09:39:47 +08:00
@daijinming 做小文件的查重第一步不要用 md5,先用一个短摘要算法(名字我给忘了 orz,好像是生成 16 位的)进行粗略查重,然后在这些相同的再进行 md5 测试
|
9
janxin 2019-03-06 10:00:27 +08:00
@SeaRecluse 先用 CRC16 或者 CRC32 查重然后 md5 吧
|
10
daijinming OP |
11
pkoukk 2019-03-06 10:31:58 +08:00
java 里有 16 位 md5,但是它的值其实是 32 位里的 9-24 位。如果你要筛查的文件数不是天文数字,一般是够用的
|
12
yicong135 2019-03-06 11:00:02 +08:00
你是不是需要这个 BitConverter.ToString(byte[] bytes)
|
13
c4f36e5766583218 2019-03-06 11:05:08 +08:00
了解下:
1. java8: java.util.Base64#getUrlEncoder() 2. org.apache.commons.codec.binary.Base64#Base64(boolean) 3. com.google.common.io.BaseEncoding#base64Url() 4. base58?? |
14
hiouyuu 2019-03-06 14:17:36 +08:00
|