日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

04.openssl编程——哈希表

發布時間:2023/12/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 04.openssl编程——哈希表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
4.1??? 哈希表在一般的數據結構如線性表和樹中,記錄在結構中的相對位置與記錄的關鍵字之間不存在確定的關系,在結構中查找記錄時需要進行一系列的關鍵字比較。這一類查找方法建立在比較的基礎上,查找的效率與比較次數密切相關。理想的情況是能直接找到需要的記錄,因此必須在記錄的存儲位置和他的關鍵字之間建立的對應關系,使每個關鍵字哈希表存在沖突現象:不同的關鍵字可能得到同一哈希地址。在建造哈希表時不僅要設定一個好的哈希函數,而且要設定一種處理沖突的方法。4.2 哈希表數據結構其原代碼crypto/lhash目錄下。openssl中的哈希表數據結構在lhash.h中定義如下:struct lhash_node_st {void *data;struct lhash _node_st *next;unsigned long hash;}struct lhash_st {OPENSSL_LH_NODE **b; 指針數組用于存放所有的數據,數組中的每一個值為數據鏈表的頭指針OPENSSL_LH_COMPFUNC comp;存放數據比較函數地址OPENSSL_LH_HASHFUNC hash;存放計算哈希值函數的地址unsigned int num_nodes;為鏈表個數unsgined int num_alloc_nodes;分配空間的大小unsigned int p;unsigned int pmax;unsigned long up_load;unsigned long down_load;unsigned long num_items;unsigned long num_expand_reallocs;unsigned long num_expand_reallocs;unsgined long num_contracts;unsigned long num_contract_reallocs;unsigned long num_comp_calls;unsigned long num_hash_calls;unsigned long num_insert;unsgined long num_replace;unsigned long num_delete;unsigned long num_retrieve;unsigned long num_retrieve_miss;unsigned long num_hash_comps;int error;}4.3 函數說明a.LHASH *OPENSSL_lh_new(LLHASH_HASH_FN_TYPE h, LHASH_COMP_FN_TYPE c)功能:生成哈希表說明:輸入參數h為哈希函數,c為比較函數。這兩個函數都是回調函數。因為哈希表用于存放任意的數據結構,哈希表存放、查詢、刪除等操作都需要比較函數和進行哈希運算,而哈希表不知道數據如何進行比較,也不知道用戶數據結構中需要對那些關鍵項進行散列運算。所以,用戶必須提供這兩個回調函數。b.void *OPENSSL_LH_delete(LHASH *lh, ocnst void *data)功能:刪除散列表中的一個數據說明:data為數據結構指針c.void OPENSSL_LH_doall(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNC func)功能:處理哈希表中的所有數據說明:func為外不提供的回調函數,本函數遍歷所有存儲哈謝表中的數據,每個數據被func處理d.void OPENSSL_LH_free(OPENSSL_LHASH *lh)功能:釋放哈希表e.void OPENSSL_LH_doall_arg(OPENSSL_LHASH *lh, OPENSSL_LH_DOALL_FUNCARG func, void *arg)功能:處理哈希表中所有數據說明:此參數類似于OPENSSL_LH_doall函數,func為外部提供的回調函數,arg為傳遞給func函數的參數。本函數遍歷所有存儲的哈希表中的數據,每個數據被func處理。f.void *OPENSSL_LH_insert(OPENSSL_LHASH *lh, void *data)功能:往哈希表中添加數據說明:data為需要添加數據結構的指針地址g.void *OPENSSL_LH_retrieve(OPENSSL_LHASH *lh, const void *data)功能:查詢數據說明:從哈希表中查詢數據,data為數據結構地址,次數據結構中必須提供關鍵項(這些關鍵想對于用戶提供的哈希函數和比較函數)以供查詢,如果查詢成功,返回數據結構的地址,否則返回NULL.SSL_SESSION *ret = NULL, data;data.ssl_version=s->version;data.session_id_length = len;memcpy(data.session_id, session_id, len);ret = (SSL_SESSION*)lh_retriev(s->ctx->sessions,&data);h.void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out)源文件:lh_stats.c功能:將哈希表中每個鏈表下的數據狀態輸出到BIO中。i.void OPENSSL_LH_node_usage_stats_bio(const OPENSSL_LHASH *lh, BIO *out)源文件:lh_stats.c功能:將哈希表的使用狀態輸出到BIO中j.unsigned long OPENSSL_LH_num_items(const OPENSSL_LHASH *lh)源文件:lhash.c功能:輸出哈希表統計信息到BIO中k.void OPENSSL_LH_stats_bio(const OPENSSL_LHASH *lh, BIO *out)源文件:lh_stats.c功能:輸出哈希表統計信息到BIO中l.void OPENSSL_LH_stats(const OPENSSL_LHASH *lh,FILE *fp)源文件:lh_stats.c功能:輸出哈希表統計信息到BIO中n.unsigned long lh_strhash(const char *c)源文件:lhash.c功能:計算本自負穿到哈希表中

轉載于:https://www.cnblogs.com/aixiaoxiaoyu/articles/8298433.html

總結

以上是生活随笔為你收集整理的04.openssl编程——哈希表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。