//加密
$hash_password = hash_password($password, PASSWORD_DEFAULT);
//驗證
if (password_verify($password, $hash_password)) {
//密碼正確
} else {
//密碼錯誤
}
B. php通過post提交後有一個__hash__鍵名,復選框裡面的value中的值不能獲取怎麼解決(急在線等大神回答)
經本機實測,你的代碼在我這里可以正常運行,結果如下:
Array
(
[name] => aa
[checkbox] => Array
(
[0] => 1
[1] => 3
[2] => 4
)
[submit] => 提交
)
你要檢查一下你的伺服器配置是否有問題。
C. php用什麼函數讀取文件的infohash值
hash_file()
D. 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);
}
E. 怎樣獲取文件的hash值
以下回答用常用的MD5來代替您問題中所說的hash值。
C/C++沒有md5的函數。需要自己實現或者使用第三方庫
PHP有MD5函數。
F. PHP 如何獲取圖片的哈希值啊。。
你好,哈希演算法很多,自帶有,sha1函數跟md5函數,獲取圖片的哈希值要讀取內容去運算,
如$file=file_get_contents("圖片路徑"); echo sha1($file);//哈希值,echo md5($file);//md5值,這兩個都是摘要。謝謝
G. PHP mysql 實現hash分區的問題
當分片索引不是純整型的字元串時,只接受整型的內置 hash 演算法是無法使用的。為此,stringhash 按照用戶定義的起點和終點去截取分片索引欄位中的部分字元,根據當中每個字元的二進制 unicode 值換算出一個長整型數值,然後就直接調用內置 hash 演算法求解分片路由:先求模得到邏輯分片號,再根據邏輯分片號直接映射到物理分片。
用戶需要在 rule.xml 中定義 partitionLength[] 和 partitionCount[] 兩個數組和 hashSlice 二元組。
在 DBLE 的啟動階段,點乘兩個數組得到模數,也是邏輯分片的數量
並且根據兩個數組的叉乘,得到各個邏輯分片到物理分片的映射表(物理分片數量由 partitionCount[] 數組的元素值之和)
此外根據 hashSlice 二元組,約定把分片索引值中的第 4 字元到第 5 字元(字元串以 0 開始編號,編號 3 到編號 4 等於第 4 字元到第 5 字元)字元串用於 「字元串->整型」的轉換
在 DBLE 的運行過程中,用戶訪問使用這個演算法的表時,WHERE 子句中的分片索引值會被提取出來,取當中的第 4 個字元到第 5 字元,送入下一步
設置一個初始值為 0 的累計值,逐個取字元,把累計值乘以 31,再把這個字元的 unicode 值當成長整型加入到累計值中,如此類推直至處理完截取出來的所有字元,此時的累計值就能夠代表用戶的分片索引值,完成了 「字元串->整型」 的轉換
對上一步的累計值進行求模,得到邏輯分片號
再根據邏輯分片號,查映射表,直接得到物理分片號
與MyCat的類似分片演算法對比
兩種演算法在string轉化為int之後,和 hash 分區演算法相同,區別也繼承了 hash 演算法的區別。
開發注意點
【分片索引】1. 必須是字元串
【分片索引】2. 最大物理分片配置方法是,讓 partitionCount[] 數組和等於 2880
例如:
或
【分片索引】3. 最小物理分片配置方法是,讓 partitionCount[] 數組和等於 1
例如
【分片索引】4. partitionLength 和 partitionCount 被當做兩個逗號分隔的一維數組,它們之間的點乘必須在 [1, 2880] 范圍內
【分片索引】5. partitionLength 和 partitionCount 的配置對順序敏感
和
是不同的分片結果
【分片索引】6. 分片索引欄位長度小於用戶指定的截取長度時,截取長度會安全減少到符合分片索引欄位長度
【數據分布】1. 分片索引欄位截取越長則越有利於數據均勻分布
【數據分布】2. 分片索引欄位的內容重復率越低則越有利於數據均勻分布
運維注意點
【擴容】1. 預先過量分片,並且不改變 partitionCount 和 partitionLength 點乘結果,也不改變截取設置 hashSlice 時,可以避免數據再平衡,只需進行涉及數據的遷移
【擴容】2. 若需要改變 partitionCount 和 partitionLength 點乘結果或改變截取設置 hashSlice 時,需要數據再平衡
【縮容】1. 預先過量分片,並且不改變 partitionCount 和 partitionLength 點乘結果,也不改變截取設置 hashSlice 時,可以避免數據再平衡,只需進行涉及數據的遷移
【縮容】2. 若需要改變 partitionCount 和 partitionLength 點乘結果或改變截取設置 hashSlice 時,需要數據再平衡
配置注意點
【配置項】1. 在 rule.xml 中,可配置項為<property name="partitionLength"> 、<property name="partitionCount"> 和 <property name="hashSlice">
【配置項】2.在 rule.xml 中配置 <property name="partitionLength">標簽
內容形式為:<物理分片持有的虛擬分片數>[,<物理分片持有的虛擬分片數>,...<物理分片持有的虛擬分片數>]
物理分片持有的虛擬分片數必須是整型,物理分片持有的虛擬分片數從左到右與同順序的物理分片數對應,partitionLength 和partitionCount 的點乘結果必須在 [1, 2880] 范圍內
【配置項】3. 在 rule.xml 中配置 <property name="partitionCount">標簽
內容形式為:<物理分片數>[,<物理分片數>,...<物理分片數>]
其中物理分片數必須是整型,物理分片數按從左到右的順序與同順序的物理分片持有的虛擬分片數對應,物理分片的編號從左到右連續遞進,partitionLength 和 partitionCount 的點乘結果必須在 [1, 2880] 范圍內
【配置項】4. partitionLength 和 partitionCount 的語義是:持有partitionLength[i] 個虛擬分片的物理分片有 partitionCount[i] 個
例如
語義是持有 512 個邏輯分片的物理分片有 1 個,緊隨其後,持有 256 個邏輯分片的物理分片有 2 個
【配置項】5.partitionLength 和 partitionCount 都對書寫順序敏感,
例如
分片結果是第一個物理分片持有頭512個邏輯分片,第二個物理分片持有緊接著的256個邏輯分片,第三個物理分片持有最後256個邏輯分片,相對的
分片結果則是第一個物理分片持有頭 256 個邏輯分片,第二個物理分片持有緊接著的 256 個邏輯分片,第三個物理分片持有最後 512 個邏輯分片
【配置項】6.partitionLength[] 的元素全部為 1 時,這時候partitionCount 數組和等於 partitionLength 和 partitionCount 的點乘,物理分片和邏輯分片就會一一對應,該分片演算法等效於直接取余
【配置項】7.在 rule.xml 中配置標簽,從分片索引欄位的第幾個字元開始截取到第幾個字元:
若希望從首字元開始截取 k 個字元( k 為正整數),配置的內容形式可以為「 0 : k 」、「 k 」或「 : k 」;
若希望從末字元開始截取 k 個字元( k 為正整數),則配置的內容形式可以為「 -k : 0 」、「 -k 」或「 -k : 」;
若希望從頭第 m 個字元起算截取 n 個字元( m 和 n 都是正整數),則先計算出 i = m - 1 和 j = i + n - 1,配置的內容形式為「 i : j 」;
若希望從尾第 m 個字元起算截取從尾算起的 n 個字元( m 和 n 都是正整數),則先計算出 i = -m + n - 1,配置的內容形式可以為「 -m : i 」;
若希望不截取,則配置的內容形式可以為「 0 : 0 」、「 0 : 」、「 : 0 」或 「 : 」
H. php 如何實現MD5類型的哈希運算
<?
$str="字元串的值,隨便寫";
echo 「\$str的md5的值是:」.md5($str);
echo "\$str的sha1的hash值是:".sha1($str);
?>
還是給你實例看吧,新手理解起來可能有點困難 看實例就簡單了
I. 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。
J. 深入PHP中的HashTable結構詳解
深入PHP中的HashTable結構詳解
對php內核有一定了解的人應該都知道php的精髓就是HashTable,HashTable在php的實現中無處不在。包括php的數組、什麼全局變數、局部變數的作用域等等,php的hashtable拆開來說就是四部分:
hash函數:用的是time33的散列函數,將一個字元串的key轉換成一個數字
一個C數組:用來儲存桶(buckets)的
兩個雙向的鏈表:第一個雙向鏈表是數組的每個元素(桶bucket)是一個雙向鏈表,這樣做是為了解決hash沖突;第二個雙向鏈表是數組將每一個桶(bucket)連接起來,這里要連接的也就是第一個雙向鏈表的鏈表頭,這樣做是為了遍歷整個hash表用的,鳥哥有篇blog是講php的foreach的,這里這樣設計就是給foreach用的==>《深入理解PHP之數組(遍歷順序)》
我這里不再說hashtable的struct和bucket的`struct了,因為下面的推薦鏈接幾乎都講了,我不覺得我能描述和說的比他們好,每個人的水平不一樣,我就以我現在的技術水平來描述,所以我就只把我整理的一些東西記錄一下
下面是php中hash實現的兩個文件:zend_hash.c zend_hash.h。這兩個文件裡面實現了一堆的api,也引申出了一堆的api,下面是實現出來的api的原型
復制代碼 代碼如下:
ZEND_API ulong zend_hash_func(const char *arKey, uint nKeyLength)
ZEND_API ulong zend_get_hash_value(const char *arKey, uint nKeyLength)
ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC)
ZEND_API void zend_hash_set_apply_protection(HashTable *ht, zend_bool bApplyProtection)
ZEND_API int _zend_hash_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)
ZEND_API int _zend_hash_quick_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)
ZEND_API int _zend_hash_index_update_or_next_(HashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)
ZEND_API int zend_hash_rehash(HashTable *ht)
static int zend_hash_do_resize(HashTable *ht)
ZEND_API int zend_hash_del_key_or_index(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, int flag)
ZEND_API void zend_hash_destroy(HashTable *ht)
ZEND_API void zend_hash_clean(HashTable *ht)
static Bucket *zend_hash_apply_r(HashTable *ht, Bucket *p)
ZEND_API void zend_hash_graceful_destroy(HashTable *ht)
ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht)
ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)
ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argument TSRMLS_DC)
ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func_args_t apply_func, int num_args, …)
ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)
ZEND_API void zend_hash_(HashTable *target, HashTable *source, _ctor_func_t pCopyConstructor, void *tmp, uint size)
ZEND_API void _zend_hash_merge(HashTable *target, HashTable *source, _ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite ZEND_FILE_LINE_DC)
static zend_bool zend_hash_replace_checker_wrapper(HashTable *target, void *source_data, Bucket *p, void *pParam, merge_checker_func_t merge_checker_func)
ZEND_API void zend_hash_merge_ex(HashTable *target, HashTable *source, _ctor_func_t pCopyConstructor, uint size, merge_checker_func_t pMergeSource, void *pParam)
ZEND_API int zend_hash_find(const HashTable *ht, const char *arKey, uint nKeyLength, void **pData)
ZEND_API int zend_hash_quick_find(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void **pData)
ZEND_API int zend_hash_exists(const HashTable *ht, const char *arKey, uint nKeyLength)
ZEND_API int zend_hash_quick_exists(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h)
ZEND_API int zend_hash_index_find(const HashTable *ht, ulong h, void **pData)
ZEND_API int zend_hash_index_exists(const HashTable *ht, ulong h)
ZEND_API int zend_hash_num_elements(const HashTable *ht)
ZEND_API int zend_hash_get_pointer(const HashTable *ht, HashPointer *ptr)
ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr)
ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos)
ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos)
ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos)
ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos)
ZEND_API int zend_hash_get_current_key_ex(const HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool plicate, HashPosition *pos)
ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos)
ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos)
ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const char *str_index, uint str_length, ulong num_index, int mode, HashPosition *pos)
ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compar, int renumber TSRMLS_DC)
ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC)
ZEND_API int zend_hash_minmax(const HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC)
ZEND_API ulong zend_hash_next_free_element(const HashTable *ht)
void zend_hash_display_pListTail(const HashTable *ht)
void zend_hash_display(const HashTable *ht)
;