hashlib是python專門用來加密解密的庫,有md5, sha1, sha224, sha256, sha384, sha512。
Python的hashlib提供了常見的摘要演算法,如MD5,SHA1等等。
什麼是摘要演算法呢?摘要演算法又稱哈希演算法、散列演算法。它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進制的字元串表示)。
函數
用於計算用戶名和密碼相加得到的加密值。
def calc_md5(username, password):
md5 = hashlib.md5()
str_dd = username + password
md5.update(str_dd.encode('utf-8')) return md5.hexdigest()12345
測試源碼
# coding = utf-8##################################################### coding by 劉雲飛####################################################import hashlib
test_string = '123456'md5 = hashlib.md5()
md5.update(test_string.encode('utf-8'))
md5_encode = md5.hexdigest()
print(md5_encode)
sha1 = hashlib.sha1()
sha1.update(test_string.encode('utf-8'))
sha1_encode = sha1.hexdigest()
print(sha1_encode)123456789101112131415161718
輸出結果為
❷ 什麼是報文摘要演算法
本文描述了MD5報文摘要演算法,此演算法將對輸入的任意長度的信息進行計算,產生一個128位
長度的「指紋」或「報文摘要」,假定兩個不同的文件產生相同的報文摘要或由給定的報文摘要產生
原始信息在計算上是行不通的。MD5演算法適合用在數據簽名應用中,在此應用中,一個大的文件必
須在類似RSA演算法的公用密鑰系統中用私人密鑰加密前被「壓縮」在一種安全模式下。
MD5演算法能在32位機器上能以很快的速度運行。另外,MD5演算法不需要任何大型的置換列表。
此演算法編碼很簡潔。MD5演算法是MD4報文摘要演算法的擴展。MD5演算法稍慢於MD4演算法,但是在設
計上比MD4演算法更加「保守」。設計MD5是因為MD4演算法被採用的速度太快,以至於還無法證明
它的正確性,因為MD4演算法速度非常快,它處在遭受成功秘密攻擊的「邊緣」。MD5後退了一步,
它舍棄了一些速度以求更好的安全性。它集中了不同的評論家提出的建議,並採取了一些附加的優化
措施。它被放在公共的地方以求公眾的評論意見,它可能當作一個標准被採納。
作為基於OSI的應用,MD5的對象標識符是:
md5OBJECTIDENTIFIER::=
iso(1)member-body(2)US(840)rsadsi(113549)digestAlgorithm(2)5}
在X.509類型AlgorithmIdentifier[3]中,MD5演算法參數應該包括NULL類型。
2 術語和符號
本文中一個「字」是32位,一個「位元組」是8位。一系列位串可看成是一系列位元組的普通形式,
其中的連續的8位看成一個位元組,高位在前,同理一系列位元組串可看成是一系列32位的字,其中每
個連續的4個位元組當作一個字,地位在前。
我們定義x_i代表「x減去I".如果下劃線左邊的是一個表達式,則用括弧括住,如:
x_{i+1}。同樣我們用^代表求冪,這樣x^i則代表x的i次冪。
符號「+」代表字的加,X<<<s代表32位的值X循環左移s位,not(X)代表X的按位
補運算,XvY表示X和Y的按位或運算,XxorY代表X和Y的按位異或運算,XY代表
X和Y的按位與運算。
3 MD5演算法描述
我們假設有一個b位長度的輸入信號,希望產生它的報文摘要,此處b是一個非負整數,b也可
能是0,不一定必須是8的整數倍,它可能是任意大的長度。我們設想信號的比特流如下所示:
m_0m_1...m_{b-1}
下面的5步計算信息的報文摘要。
(1)補位
MD5演算法是對輸入的數據進行補位,使得如果數據位長度LEN對512求余的結果是448。即數
據擴展至K*512+448位。即K*64+56個位元組,K為整數。補位操作始終要執行,即使數據長度LEN
對512求余的結果已是448。
具體補位操作:補一個1,然後補0至滿足上述要求。總共最少要補一位,最多補512位。
(2)補數據長度
用一個64位的數字表示數據的原始長度b,把b用兩個32位數表示。那麼只取B的低64位。
當遇到b大於2^64這種極少遇到的情況時,這時,數據就被填補成長度為512位的倍數。也就是說,
此時的數據長度是16個字(32位)的整數倍數。用M[0...N-1]表示此時的數據,其中的N是16
的倍數。
(3)初始化MD緩沖器
用一個四個字的緩沖器(A,B,C,D)來計算報文摘要,A,B,C,D分別是32位的寄存器,初
始化使用的是十六進製表示的數字
A=0X01234567
B=0X89abcdef
C=0Xfedcba98
D=0X76543210
(4)處理位操作函數
首先定義4個輔助函數,每個函數的輸入是三個32位的字,輸出是一個32位的字。
X,Y,Z為32位整數。
F(X,Y,Z)=XYvnot(X)Z
G(X,Y,Z)=XZvYnot(Z)
H(X,Y,Z)=XxorYxorZ
I(X,Y,Z)=Yxor(Xvnot(Z))
這一步中使用一個64元素的常數組T[1...64],它由sine函數構成,T[i]表示數組中的第i個元
素,它的值等於經過4294967296次abs(sin(i))後的值的整數部分(其中i是弧度)。T[i]為32位
整數用16進製表示
❸ 如何使用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 的第三方庫,它是被專門設計出來哈希密碼的。
❹ 既然每個不同文件的MD5不一樣,那麼新建一個文本文檔,裡面假設字元長度比md5長度多十位,文件內排
首先,不同的文件可能有相同的md5摘要值
md5演算法得出的摘要長度為32位的字元串,包含0-9a-f共16個不同的字元
則md5最多有16^32=3.402823669e+038個,而且並不是這裡面所有的字元串都是md5的結果
所以md5一定會有重復
但是,如果通過一個文件的md5,然後通過偽造信息,構造另一個相同MD5的文件,並且構造出的文件可用,是十分困難的(但這么做是可行的),所以md5可以判斷文件是否經過篡改
但對重要的文件,建議使用多種摘要演算法進行計算,確保文件不會被篡改
❺ 常用的加密演算法有哪些
對稱密鑰加密
對稱密鑰加密 Symmetric Key Algorithm 又稱為對稱加密、私鑰加密、共享密鑰加密:這類演算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單的相互推算的密鑰,對稱加密的速度一般都很快。
分組密碼
分組密碼 Block Cipher 又稱為「分塊加密」或「塊加密」,將明文分成多個等長的模塊,使用確定的演算法和對稱密鑰對每組分別加密解密。這也就意味著分組密碼的一個優點在於可以實現同步加密,因為各分組間可以相對獨立。
與此相對應的是流密碼:利用密鑰由密鑰流發生器產生密鑰流,對明文串進行加密。與分組密碼的不同之處在於加密輸出的結果不僅與單獨明文相關,而是與一組明文相關。
DES、3DES
數據加密標准 DES Data Encryption Standard 是由IBM在美國國家安全局NSA授權下研製的一種使用56位密鑰的分組密碼演算法,並於1977年被美國國家標准局NBS公布成為美國商用加密標准。但是因為DES固定的密鑰長度,漸漸不再符合在開放式網路中的安全要求,已經於1998年被移出商用加密標准,被更安全的AES標准替代。
DES使用的Feistel Network網路屬於對稱的密碼結構,對信息的加密和解密的過程極為相似或趨同,使得相應的編碼量和線路傳輸的要求也減半。
DES是塊加密演算法,將消息分成64位,即16個十六進制數為一組進行加密,加密後返回相同大小的密碼塊,這樣,從數學上來說,64位0或1組合,就有2^64種可能排列。DES密鑰的長度同樣為64位,但在加密演算法中,每逢第8位,相應位會被用於奇偶校驗而被演算法丟棄,所以DES的密鑰強度實為56位。
3DES Triple DES,使用不同Key重復三次DES加密,加密強度更高,當然速度也就相應的降低。
AES
高級加密標准 AES Advanced Encryption Standard 為新一代數據加密標准,速度快,安全級別高。由美國國家標准技術研究所NIST選取Rijndael於2000年成為新一代的數據加密標准。
AES的區塊長度固定為128位,密鑰長度可以是128位、192位或256位。AES演算法基於Substitution Permutation Network代換置列網路,將明文塊和密鑰塊作為輸入,並通過交錯的若干輪代換"Substitution"和置換"Permutation"操作產生密文塊。
AES加密過程是在一個4*4的位元組矩陣(或稱為體State)上運作,初始值為一個明文區塊,其中一個元素大小就是明文區塊中的一個Byte,加密時,基本上各輪加密循環均包含這四個步驟:
ECC
ECC即 Elliptic Curve Cryptography 橢圓曲線密碼學,是基於橢圓曲線數學建立公開密鑰加密的演算法。ECC的主要優勢是在提供相當的安全等級情況下,密鑰長度更小。
ECC的原理是根據有限域上的橢圓曲線上的點群中的離散對數問題ECDLP,而ECDLP是比因式分解問題更難的問題,是指數級的難度。而ECDLP定義為:給定素數p和橢圓曲線E,對Q=kP,在已知P,Q 的情況下求出小於p的正整數k。可以證明由k和P計算Q比較容易,而由Q和P計算k則比較困難。
數字簽名
數字簽名 Digital Signature 又稱公鑰數字簽名是一種用來確保數字消息或文檔真實性的數學方案。一個有效的數字簽名需要給接收者充足的理由來信任消息的可靠來源,而發送者也無法否認這個簽名,並且這個消息在傳輸過程中確保沒有發生變動。
數字簽名的原理在於利用公鑰加密技術,簽名者將消息用私鑰加密,然後公布公鑰,驗證者就使用這個公鑰將加密信息解密並對比消息。一般而言,會使用消息的散列值來作為簽名對象。
❻ 如何用Python玩轉TF-IDF之尋找相似文章並生成摘要
應用1:關鍵詞自動生成
核心思想是對於某個文檔中的某個詞,計算其在這個文檔中的標准化TF值,然後計算這個詞在整個語料庫中的標准化IDF值。在這里,標准化是說對原始的計算公式進行了一些變換以取得更好的衡量效果,並避免某些極端情況的出現。這個詞的TF-IDF值便等於TF*IDF。對於這個文檔中的所有詞計算它們的TF-IDF值,並按照由高到低的順序進行排序,由此我們便可以提取我們想要的數量的關鍵詞。
TF-IDF的優點是快捷迅速,結果相對來說比較符合實際情況。缺點是當一篇文檔中的兩個詞的IDF值相同的時候,出現次數少的那個詞有可能更為重要。再者,TF-IDF演算法無法體現我詞的位置信息,出現位置靠前的詞與出現位置靠後的詞,都被視為重要性相同,這是不正確的。存在的解決辦法是對文章的第一段和每段的第一句話給予比較大的權重。
應用2:計算文本相似度
明白了對於每個詞,如何計算它的TF-IDF值。那麼計算文本相似度也輕而易舉。我們已經計算了文章中每個詞的TF-IDF值,那麼我們便可以將文章表徵為詞的TF-IDF數值向量。要計算兩個文本的相似度,只需要計算餘弦即可,餘弦值越大,兩個文本便越相似。
應用3:自動摘要
2007年,美國學者的論文<A Survey on Automatic Text Summarization>總結了目前的自動摘要演算法,其中很重要的一種就是詞頻統計。這種方法最早出自1958年IBM公司一位科學家的論文<The Automatic Creation of Literature Abstracts>。這位科學家認為,文章的信息都包含在句子中,有的句子包含的信息多,有的句子包含的信息少。自動摘要就是找出那些包含信息最多的句子。那麼句子的信息量怎麼衡量呢?論文中採用了關鍵詞來衡量。如果包含的關鍵詞越多,就說明這個句子越重要,這位科學家提出用Cluster的來表示關鍵詞的聚集。所謂簇,就是包含多個關鍵詞的句子片段。
以第一個圖為例,其中的cluster一共有7個詞,其中4個是關鍵詞。因此它的重要性分值就等於(4*4)/7=2.3。然後,找出包含cluster重要性分值最高的句子(比如5句),把它們合在一起,就構成了這篇文章的自動摘要。具體實現可以參見<Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites>(O'Reilly, 2011)一書的第8章,Python代碼見github。這種演算法後來被簡化,不再區分cluster,只考慮句子包含的關鍵詞。偽代碼如下。
Summarizer(originalText,maxSummarySize):
//計算文本的詞頻,生成一個列表,比如[(10,'the'),(3,'language'),(8,'code')...]
wordFrequences=getWordCounts(originalText)
//過濾掉停用詞,列表變成[(3,'language'),(8,'code')...]
contentWordFrequences=filtStopWords(wordFrequences)
//按照詞頻的大小進行排序,形成的列表為['code','language'...]
contentWordsSortbyFreq=sortByFreqThenDropFreq(contentWordFrequences)
//將文章分成句子
sentences=getSentences(originalText)
//選擇關鍵詞首先出現的句子
setSummarySentences={}
:
firstMatchingSentence=search(sentences,word)
setSummarySentences.add(firstMatchingSentence)
ifsetSummarySentences.size()=maxSummarySize:
break
//將選中的句子按照出現順序,組成摘要
summary=""
foreachsentenceinsentences:
:
summary=summary+""+sentence
returnsummary
類似的演算法已經被寫成了工具,比如基於Java的Classifier4J庫的SimpleSummariser模塊、基於C語言的OTS庫、以及基於classifier4J的C#實現和python實現。
❼ python哪些標准庫
標准庫比較多 功能也不同:
標准庫
sys
系統相關的參數和函數。 sys 庫一般用來訪問和修改系統相關信息,比如查看 python 版本、系統環境變數、模塊信息和 python 解釋器相關信息等等。
os
操作系統介面模塊。這個庫提供了訪問操作系統相關依賴的方式,比如輸入輸出操作、讀寫操作、操作系統異常錯誤信息、進程線程管理、文件管理、調度程序等等。
re
正則表達式操作。這個庫是我喜歡並且經常會用到的庫,在對大量字元串進行處理的時候用正則表達式是最快速有效的方式,但是正則表達式的學習曲線較高,有興趣的朋友可以訪問這個網站學習。
math
數學函數庫。 math 庫提供了對 C 語言標準定義的數學函數訪問,比如數論(Number-theoretic)的各種表示方法、冪和對數函數(Power and logarithmic functions)、三角函數(Trigonometric functions)、常量圓周率(π)和自然常數(e)等等。
random
生成偽隨機數。
偽隨機數與隨機數(真隨機數)不同的是執行環境,隨機數是真實世界中通過物理過程實踐得出結論,而偽隨機數是通過計算機的特定演算法生成的數,所以這個過程是可預測的、有規律的,只是循環周期較長,並不能與現實場景相切合。
random庫提供生成隨機數,可以模擬現實世界中隨機取數、隨機抽獎等等。
logging
日誌記錄工具。這個庫提供了對應用程序和庫函數的日誌記錄,日常開發中我們經常需要通過日誌列印出當前程序的運行狀態,實時查看可能出現的堆棧異常和錯誤信息。
json
Json 編碼和解碼器。 json 庫提供了對 json 數據的支持,日常開發中我們做前後端分離需要對傳輸數據 json 進行序列化和反序列化操作,以保證對數據的完整性和有效性,而序列化和反序列化其實就是編碼和解碼的過程。
pickle
Python 對象序列化庫。 pickle 庫支持對 python 對象進行序列化和反序列化操作,當我們需要將處理好的對象保存到文件或資料庫中時,就可以將其序列化成二進制數據,從而更好的保存起來。
shelve
Python 對象持久化。簡單的數據存儲方案。
socket
底層網路介面。 socket(套接字) 庫提供了標準的BSD(伯克利套接字) Socket API,可以通過訪問底層操作系統 Socket 的相關介面進行網路通訊。
datetime
基本日期和時間類型庫。該庫提供了各種簡單和復雜的方式處理日期和時間,日常我們會用時間測算時間消耗、復雜度,對存儲的創建時間和修改時間也需要進一步說明,對計時器的描述和控制也需要用到該庫。
hashlib
安全哈希和消息摘要。摘要演算法 其實就是對某些數據進行加密(不可逆的加密演算法),因為被加密的數據無法破解,所以就能防止被篡改。常見的摘要演算法有 MD5、SHA1,一般我們會用 MD5 對用戶口令進行加密,防止盜用後被輕易破解;而 SHA1 與 MD5 類似,但是 SHA1 會產生更長的長度,也更安全,但是演算法的復雜性通常伴隨著存儲空間和時間的消耗。要說比SHA1更長的字元長度,還有 SHA224、SHA256、SHA384 和 SHA512,看名字就能知道。
大家都知道無論演算法生成的字元長度如何都有可能發生碰撞(被破解),這是不可避免的,所以具體場景具體情況而定。
configparser
配置文件解析器。 configparser 庫可以輕松定製配置文件,通過解析配置文件的信息我們就可以全局訪問相關配置。
urllib
URL 處理模塊。 urllib 庫集成了處理 URLs(統一資源定位符)的各種模塊:
URL urllib.request URL robots.txt urllib 庫對訪問網路有很好的支持,提供了對數據的訪問和處理、文件的上傳和下載、記錄 cookie 和 session 等等。
itertools
為高效循環而創建迭代器的函數。 itertools 庫也是經常需要用到,當我們要對某些數進行 for-in 時就需要先將其處理成一個可迭代對象,之後我們才能進行遍歷操作。
collections
容器數據類型庫。 collections 庫提供了對所有容器數據類型的支持,包括 dict, list, set 和 tuple。我們可以用此庫對不同數據類型進行操作,常有的函數方法有這些:
namedtuple() 創建命名元組子類的工廠函數 deque 類似列表(list)的容器,實現了在兩端快速添加(append)和彈出(pop) ChainMap 類似字典(dict)的容器類,將多個映射集合到一個視圖裡面 Counter 字典的子類,提供了可哈希對象的計數功能 OrderedDict 字典的子類,保存了他們被添加的順序 defaultdict 字典的子類,提供了一個工廠函數,為字典查詢提供一個默認值 UserDict 封裝了字典對象,簡化了字典子類化 UserList 封裝了列表對象,簡化了列表子類化 UserString 封裝了列表對象,簡化了字元串子類化 functools
高階函數和可調用對象上的操作。該庫主要調用高階函數,是常規函數的一種補充。目前庫中包含以下幾種函數:
cmp_to_key lru_cache total_ordering partial partialmethod rece singledispatch update_wrapper wraps threading
線程並行庫。 threading 庫支持線程和多線程的操作,針對多線程並發的問題可以給數據加同步鎖,一次只能讓一個線程處理數據,從而避免出現數據讀寫混亂。
在 CPython 解釋器上,因為GIL(全局解釋器鎖)鎖機制的存在的,被設計成線程安全,所以同一時間只能執行一個線程,這就導致了多線程不能發揮出計算機的多核特性。
multiprocessing
進程並行庫。 multiprocessing 庫與 threading 庫很類似,不同的是進程庫可以創建子進程避開 GIL,從而彌補線程庫存在的劣勢和發揮計算機的多核特性。
timeit
測量小代碼片段的執行時間。此庫主要用來計算運行代碼的時間消耗,支持多種方式傳入參數。
atexit
退出處理器。當處理一個函數需要立馬退出時可以使用該庫。
abc
抽象基類。 abc 庫定義抽象基類,以便其他類派生出新類。比如 collections 容器庫中就有此派生出的 collections.abc 類,派生出來的類可以進一步實現。
asyncio
非同步IO庫。 asyncio 庫是一個用 async/await 關鍵字編寫並發的庫,為多個非同步框架提供基礎功能,能夠實現高性能的網路、Web伺服器、資料庫連接和分布式任務隊列等。
淺層和深層復制操作。 庫提供對對象的拷貝,我們都知道要製作對象副本,是無法通過簡單值傳遞創建新變數的方式做到,因為新變數所指向的內存空間依舊是原對象本身,所以對新變數進行任何操作都會改變原對象。那麼, 庫就提供了製作對象副本的各種方法,會開辟一個新的內存空間存放副本對象,修改操作不會對原對象有任何干預。
csv
csv(Comma Separated Values)文件讀寫庫。此庫支持以純文本的形式存儲表格數據(數字和文本)。
operator
標准運算符替代函數庫。此庫是將 python 自有的運算符作為有效函數,比如表達式 x+y 可以用函數 operator.add(x, y) 表示;比如表達式 a*b 可以用函數 operator.mul(a, b) 表示,等等。
enum
枚舉庫。 enum 庫支持創建枚舉類來存儲大量同類型的不可變常量,以便其他函數調用。創建出來的枚舉類是可迭代對象,所以可以用 for-in 枚舉出所有常量。
heapq
堆隊列演算法。這個模塊提供了堆隊列演算法的實現,也稱為優先隊列演算法。優先隊列中的每個元素都有各自的優先順序,優先順序最高的元素最先得到服務。所以當我們要求前n最大/最小值的時候就可以用此演算法來實現, heapq 庫中也提供了相應函數實現。
http
HTTP 模塊。 http 模塊是一個包,收集了多個處理超文本傳輸協議的模塊:
urllib.request http 模塊通過 http.HTTPStatus 枚舉定義了HTTP狀態碼 以及相關聯消息。
profile、pstats
性能分析工具。 profile 模塊提供了 profile 和 cProfile 兩種不同實現的性能分析工具,可用來描述程序各個部分的執行時間和頻率,統計後的信息可以通過 pstats 模塊保存並使用。
ssl
TLS/SSL(傳輸安全協議)。此模塊提供對安全協議的支持,通過應用上下文,可將 TLS(傳輸層安全性協議)或其前身 SSL(安全套接層)支持安全協議,能為互聯網通信提供安全和數據完整性保障。一般 HTTPS 協議都支持 TLS/SSL 加密。
unitest
單元測試框架。 unitest 庫常用於單元測試,受到 JUnit 和其他主流測試庫的啟發, unitest 庫的功能和函數與它們有著相似的風格。
uuid
UUID庫。 uuid 庫主要用途是生成隨機字元串,庫中有多個版本的 UUID 對象方法,比如版本 1、3、4 和 5 的 uuid1() 、 uuid3() 、 uuid4() 和 uuid5() 。需要注意的是,如果要生成隨機字元串,可以使用 uuid1() 和 uuid4() ,但是 uuid1() 會存在隱私風險,因為生成的原理里邊包含用戶訪問計算機的網路地址,而 uuid4() 是通過隨機字元生成。
希望可以幫助到你。
❽ Python哈希函數什麼情況下拋出異常
拋出異常是停止運行這個函數中的代碼。
哈希演算法將一個不定長的輸入,通過散列函數變換成一個定長的輸出,即散列值。是一種信息摘要演算法。對象的hash值比原對象擁有更低的內存復雜度。
它不同於加密。哈希是將目標文本轉換成具有相同長度的,不可逆的雜湊字元串,而加密則是將文本轉換為具有相同長度的,可逆的密文。哈希演算法是不可逆的,只能由輸入產生輸出,不能由輸出產生輸入。而加密則是可逆的。即可以從輸入產生輸出,也可以反過來從輸出推出輸入。
❾ 摘要演算法的分類
1、CRC8、CRC16、CRC32
CRC(Cyclic Rendancy Check,循環冗餘校驗)演算法出現時間較長,應用也十分廣泛,尤其是通訊領域,現在應用最多的就是 CRC32 演算法,它產生一個4位元組(32位)的校驗值,一般是以8位十六進制數,如FA 12 CD 45等。CRC演算法的優點在於簡便、速度快,嚴格的來說,CRC更應該被稱為數據校驗演算法,但其功能與數據摘要演算法類似,因此也作為測試的可選演算法。
在 WinRAR、WinZIP 等軟體中,也是以 CRC32 作為文件校驗演算法的。一般常見的簡單文件校驗(Simple File Verify – SFV)也是以 CRC32演算法為基礎,它通過生成一個後綴名為 .SFV 的文本文件,這樣可以任何時候可以將文件內容 CRC32運算的結果與 .SFV 文件中的值對比來確定此文件的完整性。
與 SFV 相關工具軟體有很多,如MagicSFV、MooSFV等。
2、MD2 、MD4、MD5
這是應用非常廣泛的一個演算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要演算法版本5),它由MD2、MD3、MD4發展而來,由Ron Rivest(RSA公司)在1992年提出,被廣泛應用於數據完整性校驗、數據(消息)摘要、數據加密等。MD2、MD4、MD5 都產生16位元組(128位)的校驗值,一般用32位十六進制數表示。MD2的演算法較慢但相對安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。
在互聯網上進行大文件傳輸時,都要得用MD5演算法產生一個與文件匹配的、存儲MD5值的文本文件(後綴名為 .md5或.md5sum),這樣接收者在接收到文件後,就可以利用與 SFV 類似的方法來檢查文件完整性,絕大多數大型軟體公司或開源組織都是以這種方式來校驗數據完整性,而且部分操作系統也使用此演算法來對用戶密碼進行加密,另外,它也是目前計算機犯罪中數據取證的最常用演算法。
與MD5 相關的工具有很多,如 WinMD5等。
3、SHA1、SHA256、SHA384、SHA512
SHA(Secure Hash Algorithm)是由美國專門制定密碼演算法的標准機構—— 美國國家標准技術研究院(NIST)制定的,SHA系列演算法的摘要長度分別為:SHA為20位元組(160位)、SHA256為32位元組(256位)、 SHA384為48位元組(384位)、SHA512為64位元組(512位),由於它產生的數據摘要的長度更長,因此更難以發生碰撞,因此也更為安全,它是未來數據摘要演算法的發展方向。由於SHA系列演算法的數據摘要長度較長,因此其運算速度與MD5相比,也相對較慢。
SHA1的應用較為廣泛,主要應用於CA和數字證書中,另外在互聯網中流行的BT軟體中,也是使用SHA1來進行文件校驗的。
4、RIPEMD、PANAMA、TIGER、ADLER32 等
RIPEMD是Hans Dobbertin等3人在對MD4,MD5缺陷分析基礎上,於1996年提出來的,有4個標准128、160、256和320,其對應輸出長度分別為16位元組、20位元組、32位元組和40位元組。
TIGER由Ross在1995年提出。Tiger號稱是最快的Hash演算法,專門為64位機器做了優化。
❿ python中如何分析這是一本關於什麼的文檔
最基本的就是做分詞後取最高頻詞。
作為優化,可以從詞性角度排除一些高頻詞,如高頻詞「的」之類的。
如果還想進一步優化,就需要使用大數據了,建立一個詞相關性評分表,對文檔分詞後的詞頻與這相應的相關度做加權,選取加權最高的一組詞或幾組詞為文檔的索引詞表。
然後從文檔中提取整句與提取的索引詞表履蓋度最高的若干句作為文檔的摘要。
大部分的摘要演算法就是按這個思路來完成的。