導航:首頁 > 編程語言 > python字元串hash函數

python字元串hash函數

發布時間:2022-06-03 21:19:08

A. python哈希函數什麼情況下拋出異常

拋出異常是停止運行這個函數中的代碼。
哈希演算法將一個不定長的輸入,通過散列函數變換成一個定長的輸出,即散列值。是一種信息摘要演算法。對象的hash值比原對象擁有更低的內存復雜度。
它不同於加密。哈希是將目標文本轉換成具有相同長度的,不可逆的雜湊字元串,而加密則是將文本轉換為具有相同長度的,可逆的密文。哈希演算法是不可逆的,只能由輸入產生輸出,不能由輸出產生輸入。而加密則是可逆的。即可以從輸入產生輸出,也可以反過來從輸出推出輸入。

B. 如何用Python構造hash表解決DNA k-mer問題

思路:
1、首先採用命A=0,C=1,G=2,T=3. 就相當於4進制數字,然後採用karp-Rabin演算法轉換成唯一十進制數字。由於用此演算法的哈希函數為:hash(value)=value*(4^(k-q-1));
value是該字元對應的值,k是kmer長度,q是此字元在字元串的位置范圍在[0-(q-1)]。然後把一個kmer裡面所有字元的hash值求和就行了。
2、那麼很容易看出來,對於連續的下害常憤端蒞得縫全俯戶一個Kmer,就有推理公式了 hashNew=addValue+(hashOld-deleteValue*(4^(k-1)))*4; hashNew就是往右平移一個字元的kmer hash值,hashOld就是平移之前的值,addValue就是平移後右邊多的一個字元,deleteValue就是平移後左邊少的一個字元。這樣整個hash表建立的時間復雜度約為O(m+k),m是整個文本長度。
3、由於kmer長度如果過長,其hash值過大,會造成內存不夠溢出的現象,所以kmer內部定死為10 。那麼問題就來了,如何應對不同的kmer值。分三種情況。
第一種:q>10
這種可以將kmer以10為單位,將hash表中對應值取出,然後對結果進行分析,這邊分析方法為建立兩個數組一個二維數組unionName儲存位置關系,一個一維數組unionScore,計數用。 思路就是首先第一輪初始化unionName[Name][Pos]全部賦值Pos 並初始化unionScore,然後再第二輪匹配如果unionName[Name][Pos-cycle]=Pos-1則將其賦值為當前Pos,cycle為當前循環次數。並將當前循環數存入unionScore[NAME]中。最後當unionScore[NAME]值也就是循環數為k-1,即我們需要的交集了。
第二種:q=10
直接求出hash值,取出相應的值即可。
第三種:q<10
可以用前綴種子+後綴種子交集產生。
前綴種子:在字元串後面補字元直到長度等於K,這個很容易看出來 最小是全補A,最大是全補T,然後將最小值到最大值之間的hash值即為所求。
後綴種子:後綴種子和前綴種子不同就是在字元串左邊補齊字元。所以此時需要進行變換。只要對前置種子產生的值變化下就行了。(preValue-minValue)*(4^(K-q))+hash(p) 。其中preValue就是對應的前置種子的hash值,minValue就是前置種子中最小值也就是全補A的情況,hash(p)就是字元串長度為p時候的hash值。
交集就是先求後綴種子所有的值,再加上 前綴種子中起始位置在[0-(k-1)]中的值。

C. Python如何哈希字元串

Python中字元串是可哈希的,即可以作為字典的鍵或者HashTable的鍵使用。

您可以這樣子使用Python內置函數hash(散列函數):

總之,Python裡面有很多內置的hash功能性數據結構和函數。

D. 如何使用Python 3的兩個庫來加解密字元串

哈希
如果需要用到安全哈希演算法或是消息摘要演算法,那麼你可以使用標准庫中的 hashlib 模塊。這個模塊包含了符合 FIPS(美國聯邦信息處理標准)的安全哈希演算法,包括 SHA1,SHA224,SHA256,SHA384,SHA512 以及 RSA 的 MD5 演算法。Python 也支持 adler32 以及 crc32 哈希函數,不過它們在 zlib 模塊中。
哈希的一個最常見的用法是,存儲密碼的哈希值而非密碼本身。當然了,使用的哈希函數需要穩健一點,否則容易被破解。另一個常見的用法是,計算一個文件的哈希值,然後將這個文件和它的哈希值分別發送。接收到文件的人可以計算文件的哈希值,檢驗是否與接受到的哈希值相符。如果兩者相符,就說明文件在傳送的過程中未經篡改。
讓我們試著創建一個 md5 哈希:
>>> import hashlib >>> md5 = hashlib.md5() >>> md5.update('Python rocks!') Traceback (most recent call last): File "<pyshell#5>", line 1, in <mole> md5.update('Python rocks!') TypeError: Unicode-objects must be encoded before hashing >>> md5.update(b'Python rocks!') >>> md5.digest() b'\x14\x82\xec\x1b#d\xf6N}\x16*+[\x16\xf4w'

讓我們花點時間一行一行來講解。首先,我們導入 hashlib ,然後創建一個 md5 哈希對象的實例。接著,我們向這個實例中添加一個字元串後,卻得到了報錯信息。原來,計算 md5 哈希時,需要使用位元組形式的字元串而非普通字元串。正確添加字元串後,我們調用它的 digest 函數來得到哈希值。如果你想要十六進制的哈希值,也可以用以下方法:
>>> md5.hexdigest() ''

實際上,有一種精簡的方法來創建哈希,下面我們看一下用這種方法創建一個 sha1 哈希:
>>> sha = hashlib.sha1(b'Hello Python').hexdigest() >>> sha ''

可以看到,我們可以同時創建一個哈希實例並且調用其 digest 函數。然後,我們列印出這個哈希值看一下。這里我使用 sha1 哈希函數作為例子,但它不是特別安全,讀者可以隨意嘗試其他的哈希函數。
密鑰導出
Python 的標准庫對密鑰導出支持較弱。實際上,hashlib 函數庫提供的唯一方法就是 pbkdf2_hmac 函數。它是 PKCS#5 的基於口令的第二個密鑰導出函數,並使用 HMAC 作為偽隨機函數。因為它支持「加鹽(salt)」和迭代操作,你可以使用類似的方法來哈希你的密碼。例如,如果你打算使用 SHA-256 加密方法,你將需要至少 16 個位元組的「鹽」,以及最少 100000 次的迭代操作。
簡單來說,「鹽」就是隨機的數據,被用來加入到哈希的過程中,以加大破解的難度。這基本可以保護你的密碼免受字典和彩虹表(rainbow table)的攻擊。
讓我們看一個簡單的例子:
>>> import binascii >>> dk = hashlib.pbkdf2_hmac(hash_name='sha256', password=b'bad_password34', salt=b'bad_salt', iterations=100000) >>> binascii.hexlify(dk) b''

這里,我們用 SHA256 對一個密碼進行哈希,使用了一個糟糕的鹽,但經過了 100000 次迭代操作。當然,SHA 實際上並不被推薦用來創建密碼的密鑰。你應該使用類似 scrypt 的演算法來替代。另一個不錯的選擇是使用一個叫 bcrypt 的第三方庫,它是被專門設計出來哈希密碼的。

E. python中string的hash函數為什麼選擇這個

字元串hash演算法有很多,為什麼用這個不用其他呢,也許只是隨便挑了一個性能過得去的。 如果解決了您的問題! 如果未解決請繼續追問

F. 【python】hash函數問題

我是這樣想的,這提示讓你用函數hash(s)將a, in,i,pi,za,cat,dog,puppy,them,there,spork,slate,kiwi
等字元串分類,其中長度為1的是A類,長度2的為B類,以此類推,長度為5的是E類。加點代碼,應該可以實現分類。

閱讀全文

與python字元串hash函數相關的資料

熱點內容
程序員編碼是指什麼 瀏覽:525
在雲伺服器上安裝軟體 瀏覽:270
什麼app可以免費聽周董的歌 瀏覽:364
netmvcpdf 瀏覽:209
arp伺服器回送的是什麼地址 瀏覽:103
生物學pdf百度雲 瀏覽:963
markdown源碼包怎麼下載 瀏覽:598
餐飲app開發公司哪個好 瀏覽:637
解壓盒子2無廣告 瀏覽:623
華為鴻蒙系統怎麼放大單個文件夾 瀏覽:587
phpwin864 瀏覽:913
boll優化源碼公式 瀏覽:905
連接伺服器埠號是如何確定的 瀏覽:14
gsm源碼 瀏覽:475
單片機點陣滾動 瀏覽:407
加密資產平台 瀏覽:721
二級建築師pdf教材 瀏覽:324
單片機i和e系列 瀏覽:320
peb是什麼伺服器 瀏覽:389
天正建造散水命令 瀏覽:220