亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有什么算法可以實現把md5的結果轉換成10進制的?

有沒有什么算法可以實現把md5的結果轉換成10進制的?

PHP
白板的微信 2023-04-15 21:17:29
md5這種方法都是哈希成一個字符+數字的字符串,但是現在我需要把一個字符串哈希成10進制數字,有沒有什么算法可以實現的,或者可以把md5的結果轉換成10進制的
查看完整描述

2 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

一般情況而言需要做字符串到十進制數字的轉換可以用 crc32() 函數 ...

這個函數的優點是快 ... 在我的知識范圍內這應該是 php 內置最快的哈希函數 ...

缺點是操作系統依賴 ... 不同操作系統的 crc32() 函數會產生不一樣的值 ...

至于把 md5() 的結果轉化成十進制 ... 用 hexdec() 顯然是不靠譜的 ... 原因如樓上所說不贅述 ...

這里我們用到另外一個更加靈活的進制轉換函數 base_convert() ...

這個函數的好處是返回 string ... 也就不存在溢出的問題了 ...

示例代碼如下 ...

<?phpecho base_convert( md5( 'something' ), 16, 10 );// 89699910832403552662426604448206446062


查看完整回答
反對 回復 2023-04-19
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

你可以用php的hexdec函數,把md5的結果分段轉,因為hexdec最大只能轉0x7fffffff,再大就變成float了。

另外,你不一定非要用md5,因為md5的結果是128bit的,php語言本身無法直接保存這么大的十進制數。可以參考sdbmhash、jshash、或者C++ STL里對字符串的哈希自己實現一個,例如這個是python版的sdbmhash

def sdbm_hash_string(str):    h = 0
    m = (1 << 32)    for i in str:
        t = h
        h = (t << 6) % m + (t << 16) % m - t + ord(i)        h %= m    return h

最后順便說一下,不要試圖把md5結果拆成幾段然后XOR之類的,效果不如直接取最后幾個字節。


查看完整回答
反對 回復 2023-04-19
  • 2 回答
  • 0 關注
  • 451 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號