導航:首頁 > 編程語言 > phphash

phphash

發布時間:2022-02-24 01:33:29

php中用hash實現的數組

PHP中使用最多的非Array莫屬了,那Array是如何實現的?在PHP內部Array通過一個hashtable來實現,其中使用鏈接法解決hash沖突的問題,這樣最壞情況下,查找Array元素的復雜度為O(N),最好則為1.
而其計算字元串hash值的方法如下,將源碼摘出來以供查備:
復制代碼
代碼如下:
static
inline
ulong
zend_inline_hash_func(const
char
*arKey,
uint
nKeyLength)
{
register
ulong
hash
=
5381;

//此處初始值的設置有什麼玄機么?
/*
variant
with
the
hash
unrolled
eight
times
*/
for
(;
nKeyLength
>=
8;
nKeyLength
-=
8)
{

//這種step=8的方式是為何?
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;

//比直接*33要快
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
}
switch
(nKeyLength)
{
case
7:
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
/*
fallthrough...
*/

//此處是將剩餘的字元hash
case
6:
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
/*
fallthrough...
*/
case
5:
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
/*
fallthrough...
*/
case
4:
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
/*
fallthrough...
*/
case
3:
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
/*
fallthrough...
*/
case
2:
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
/*
fallthrough...
*/

case
1:
hash
=
((hash
<<
5)
+
hash)
+
*arKey++;
break;
case
0:
break;
EMPTY_SWITCH_DEFAULT_CASE()
}
return
hash;//返回hash值
}
ps:對於以下函數,仍有兩點不明:
hash
=
5381設置的理由?
這種step=8的循環方式是為了效率么?

② php的hash_hmac 不能直接使用么 該如何配置呢

可以啊
官方手冊上的例子
echo hash_hmac('ripemd160', 'The quick brown fox jumped over the lazy dog.', 'secret');
結果:

③ php hash_hmac跟java算出來的結果不一樣

問題解決代碼如下:
public String md5(String txt) {
try{
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(txt.getBytes("GBK")); //問題主要出在這里,Java的字元串是unicode編碼,不受源碼文件的編碼影響;而PHP的編碼是和源碼文件的編碼一致,受源碼編碼影響。
StringBuffer buf=new StringBuffer();
for(byte b:md.digest()){
buf.append(String.format("%02x", b&0xff));
}
return buf.toString();
}catch( Exception e ){
e.printStackTrace();
return null;
}
}

④ PHP mysql 實現hash分區的問題

當分片索引不是純整型的字元串時,只接受整型的內置 hash 演算法是無法使用的。為此,stringhash 按照用戶定義的起點和終點去截取分片索引欄位中的部分字元,根據當中每個字元的二進制 unicode 值換算出一個長整型數值,然後就直接調用內置 hash 演算法求解分片路由:先求模得到邏輯分片號,再根據邏輯分片號直接映射到物理分片。

⑤ PHP 函數hash_hmac()怎麼用

hash_hmac — 使用 HMAC 方法生成帶有密鑰的哈希值

stringhash_hmac(string$algo,string$data,string$key[,bool$raw_output=false])

參數:

algo:要使用的哈希演算法名稱,例如:"md5","sha256","haval160,4" 等。

data:要進行哈希運算的消息。

key:使用 HMAC 生成信息摘要時所使用的密鑰。

raw_output:設置為 TRUE 輸出原始二進制數據, 設置為 FALSE 輸出小寫 16 進制字元串。

返回值:

如果 raw_output 設置為 TRUE, 則返回原始二進制數據表示的信息摘要,否則返回 16 進制小寫字元串格式表示的信息摘要。

如果 algo 參數指定的不是受支持的演算法,返回 FALSE。

⑥ php hash 是可逆的嗎

hash 演算法是單向密碼體制,是不可逆。 希望能幫到你,我還在後盾網上課學習呢現在沒時間,有不會的可以問我,加油吧⁽˙³˙⁾◟(๑•́ ₃ •̀๑)◞⁽˙³˙⁾

⑦ php實現HashCode方法

php的一種hashCode方法,參考如下:
function hashCode($str)
{
if(empty($str)) return '';
$mdv = md5($str);
$mdv1 = substr($mdv,0,16);
$mdv2 = substr($mdv,16,16);
$crc1 = abs(crc32($mdv1));
$crc2 = abs(crc32($mdv2));
return bcmul($crc1,$crc2);
}

⑧ php代碼hash解析

就是生成一段hash值,比md5和sha1更加安全而已

⑨ php hash_hmac如何解密

hmac演算法的主體還是散列函數,散列演算法本身是抽取數據特徵,是不可逆的。
所以「再得到aaa」——「逆運算獲得原數據」這種想法,是不符合hmac設計初衷,可以看成是對hmac安全性的直接挑戰,屬於解密,屬於誤用。

類似的需求,應該使用AES加密演算法實現

⑩ php中hash_init()方法詳解

函數原型:

resourcehash_init(string$algo[,int$options=0[,string$key=NULL]])

第二個參數與第三個參數要一起使用,且第二個參數目前只支持HASH_HMAC。

第三個key是在進行 HMAC 哈希運算時傳入的「共享密鑰」。

閱讀全文

與phphash相關的資料

熱點內容
優信二手車解壓後過戶 瀏覽:63
Windows常用c編譯器 瀏覽:780
關於改善國家網路安全的行政命令 瀏覽:835
安卓如何下載網易荒野pc服 瀏覽:656
javainetaddress 瀏覽:106
蘋果4s固件下載完了怎麼解壓 瀏覽:1006
命令zpa 瀏覽:288
python編譯器小程序 瀏覽:946
在app上看視頻怎麼光線調暗 瀏覽:542
可以中文解壓的解壓軟體 瀏覽:595
安卓卸載組件應用怎麼安裝 瀏覽:915
使用面向對象編程的方式 瀏覽:342
程序員項目經理的年終總結範文 瀏覽:932
內衣的加密設計用來幹嘛的 瀏覽:435
淮安數據加密 瀏覽:295
魔高一丈指標源碼 瀏覽:984
松下php研究所 瀏覽:171
c回調java 瀏覽:403
夢幻端游長安地圖互通源碼 瀏覽:747
電腦本地文件如何上傳伺服器 瀏覽:315