顯示廣告
隱藏 ✕
※ 本文為 dinos.bbs. 轉寄自 ptt.cc 更新時間: 2012-10-16 21:37:15
看板 PHP
作者 LPH66 (杇瑣)
標題 [閒聊] 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)
kerash:有點不太知道怎麼說明,其實我有一部份的問題在前面轉array1F 10/16 21:27
kerash:是不是正確的,因為原始資料第一步是要這麼做。
kerash:接著再進到加密的部分,那個 function 是直接抓 sample 的
kerash:所以我假定這個加密值是正確的(只是不確定他回來的型態)
kerash:之所以對m版友提疑問是md5我裡面完全沒用到= ="
kerash:就若是可以產生 binary,我的data也不知道怎麼產生
kerash:另外因我認為對方的這個service應該也有問題所以還在等回應

--
※ 看板: dinos 文章推薦值: 0 目前人氣: 0 累積人氣: 114 
作者 LPH66 的最新發文:
  • Re: [請益] 字編碼問題 - PHP 板
    作者: 140.112.30.32 (台灣) 2014-06-30 20:58:35
    有這種狀況的字其實不多 Unicode 有一區專門存放這種字: CJK Compatibility Ideographs U+F900~U+FAFF CJK Compatibility Ideogra …
  • +2 Re: [請益] Unicode, UTF-8, UTF-16, UTF-32? - Web_Design 板
    作者: 123.195.39.85 (台灣) 2014-03-29 21:50:54
    ff fe 00 00 其實名字以 UTF 開頭的編碼還不只這些, 只是這些相對常用而已 其中最常用的是 UTF-8 UTF-16 也不少見 UTF-32 則比較沒什麼看到, 主要還是浪費空間 (一個 …
    6F 2推
  • +1 Re: [機統] 玩遊戲遇到的期望值問題 - Math 板
    作者: 180.218.108.125 (台灣) 2012-12-02 21:44:46
    我拿 E_3 來解釋 其他類推 當對面有三點影響力時 你骰一次骰子 有 6/36 的機會移掉三點以上 結束了 4/36 的機會只移掉兩點 還要額外 E_1 次才能移掉 5/36 的機會只移掉一點 還要 …
    1F 1推
  • +1 Re: [機統] 玩遊戲遇到的期望值問題 - Math 板
    作者: 180.218.108.125 (台灣) 2012-12-02 19:52:08
    令 E_k 為對方有 k 點影響力 要全部移除的期望行動力點數 則我們有 E_1 = 1 + (21/36)E_1 E_2 = 1 + (5/36)E_1 + (21/36)E_2 E_3 = 1 + …
    1F 1推
  • [閒聊] hash function - PHP 板
    作者: 180.218.108.125 (台灣) 2012-10-16 20:16:51
    想了好一會兒不知道要下什麼標題... 只是正好上面兩篇提到的東西有些地方意外的有點共通點 所以集合起來一起回一篇 XD 從上上篇的推文起頭好了 md5 的第二個參數是用來把 md5 所算出來的結果其十 …
    7F
分享網址: 複製 已複製
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇