作者LPH66 (圬琐)
看板PHP
标题[闲聊] hash function
时间Tue Oct 16 20:16:51 2012
想了好一会儿不知道要下什麽标题...
只是正好上面两篇提到的东西有些地方意外的有点共通点
所以集合起来一起回一篇 XD
从上上篇的推文起头好了
: → mervynW:你去看md5第2个参数. 10/16 15:14
: → kerash:我这个功能不会弄到md5,这串资料是要被反解的@_@ 10/16 15:39
: → mervynW:你还是要看看我说得md5第2个参数的意义 10/16 17:23
: → kerash:以 16 进制或 binary 加密,这部分有甚麽问题吗? 10/16 18:04
md5 的第二个参数是用来把 md5 所算出来的结果其十六进位值直接以二进位字串传回
也就是说 原先呼叫 md5("")
会得到像是 "d41d8cd98f00b204e9800998ecf8427e" 的字串
当呼叫 md5("",true) 时
得回来的字串直接输出会得到像是 "?属??阃 橃鸟~" 这样的乱码
用途在於 由於它直接就是 md5 的实际二进位结果
它可以直接喂进一些需要二进位字串的函数 例如 base64_encode 之类的来做转换
以上述例子为例 那个字串它的每个字的 ascii 依序是 0xd4,0x1d,0x8c,0xd9,... 等等
於是当使用 base64_encode(md5("",true)) 的时候
就可以得到 "1B2M2Y8AsgTpgAmY7PhCfg==" 这个字串
而它正是那个长度为 16 的二进位字串做 base64 的结果
m 版友回文应该只是要指出这一点而已
mcrypt_encrypt 的回传值其实就是这种东西 (它是回传加密後的字串)
因此 k 版友你的正确做法是把 $passcrypt 直接喂进 base64_encode
(连 trim 都不用了 -- 用了说不定有时候还会错)
把结果填到那个栏位中送出
应该就是对方伺服器所需要的东西了
-----------------------------------------------------------------------
这个东西这跟上一篇的问题的关系
在於其实上上篇的 m 版友的回文里所提到的方法
稍做修改其实就能得到 j 版友所需要的 UUID 产生器了
也就是把直接用 md5 的地方改成 base64_encode(md5(...,true)) 即可
对於所需字元的问题 base64 是使用
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
这 64 个字 跟你要的 - _ 只差在最後两个
那这可以用 str_replace 解决
也就是变成 str_replace(array("+","/"),array("-","_"),base64_encode(...))
如果要连 base64 的 "=" 也滤掉的话就再加一笔「"=" 换成 ""」即可
而且由於你是要产生 UUID 而不是做什麽加密讯息 用 md5 其实就足够了
因为 UUID 要的只不过是「产生出一样的东西机率很小」而已
又不怕别人破解什麽东西
不过如果你还是想换成 SHA-1 的话
sha1() 也有这一个参数可以输出二进位结果
所以只要把 md5() 换成 sha1() 即可
--
◢ ˊ_▂▃▄▂_ˋ. ◣ ▅▅ ▅▅ ι●╮ █
▄▄▄▄▄
▍
./◤_▂▃▄▂_◥ \'▊ HARUHI █████ <■┘ ▄▄▄▄▄▄▄
▎
⊿ ◤◤◥█◥◥█Δ ISM By-gamejye ¢|\ ▌▌▌▌▌▄▌▌
▏
ζ(▏●‵◥′●▊)Ψ ▏ █
⊿Δ ▄▄▄ ▄▄▄▄
█/|▊ 〃 、 〃▋ |\ ▎ ハルヒ主义 █
▄▄▄█▄▄
◥◥|◣ ‵′ ◢/'◢◢
S.O.S 世界を大いに盛り上げるための凉宫ハルヒの団
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 180.218.108.125
※ 编辑: LPH66 来自: 180.218.108.125 (10/16 20:23)
1F:→ kerash:有点不太知道怎麽说明,其实我有一部份的问题在前面转array 10/16 21:27
2F:→ kerash:是不是正确的,因为原始资料第一步是要这麽做。 10/16 21:27
3F:→ kerash:接着再进到加密的部分,那个 function 是直接抓 sample 的 10/16 21:28
4F:→ kerash:所以我假定这个加密值是正确的(只是不确定他回来的型态) 10/16 21:29
5F:→ kerash:之所以对m版友提疑问是md5我里面完全没用到= =" 10/16 21:30
6F:→ kerash:就若是可以产生 binary,我的data也不知道怎麽产生 10/16 21:32
7F:→ kerash:另外因我认为对方的这个service应该也有问题所以还在等回应 10/16 21:33
8F:推 hSATAC:这篇有梗给推 10/17 08:35