[閒聊] hash function (回上兩串文)

看板PHP作者 (杇瑣)時間11年前 (2012/10/16 20:16), 編輯推噓1(107)
留言8則, 2人參與, 最新討論串1/1
想了好一會兒不知道要下什麼標題... 只是正好上面兩篇提到的東西有些地方意外的有點共通點 所以集合起來一起回一篇 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)

10/16 21:27, , 1F
有點不太知道怎麼說明,其實我有一部份的問題在前面轉array
10/16 21:27, 1F

10/16 21:27, , 2F
是不是正確的,因為原始資料第一步是要這麼做。
10/16 21:27, 2F

10/16 21:28, , 3F
接著再進到加密的部分,那個 function 是直接抓 sample 的
10/16 21:28, 3F

10/16 21:29, , 4F
所以我假定這個加密值是正確的(只是不確定他回來的型態)
10/16 21:29, 4F

10/16 21:30, , 5F
之所以對m版友提疑問是md5我裡面完全沒用到= ="
10/16 21:30, 5F

10/16 21:32, , 6F
就若是可以產生 binary,我的data也不知道怎麼產生
10/16 21:32, 6F

10/16 21:33, , 7F
另外因我認為對方的這個service應該也有問題所以還在等回應
10/16 21:33, 7F

10/17 08:35, , 8F
這篇有梗給推
10/17 08:35, 8F
文章代碼(AID): #1GVL0s9d (PHP)