python Crypto模組的使用
- 2020 年 1 月 13 日
- 筆記
前一個星期一直再弄爬取網易雲音樂的評論,真是一波三折,網頁又是動態js,普通的方法獲取不了,還有它發送的參數也要經過加密才….這篇文章就是寫一下Crypto模組的使用。
Crypto不是自帶的模組,需要下載。http://www.voidspace.org.uk/python/modules.shtml#pycrypto
我下載了之後,發現下載的是crypto而不是Crypto(就是差個首字母大小寫)

而crypto.Cipher而又不能運行,報錯,最後在:https://stackoverflow.com/questions/31485110/no-module-named-crypto-cipher/31485157 找到解答,需要在python目錄裡面把Python27Libsite-packages下的crypto文件改名,沒錯,就是直接改成Crypto。結果就能用了…
(因為我上面下載的是免安裝版,所以沒安裝VS2008。我用過pip,下載不了Crypto)windows下安裝這些模組真是招罪,要是我的電腦再好一點就弄雙系統了..扯遠了..
下面主要介紹一下Crypto.Cipher的AES演算法。
程式碼如下:
from Crypto.Cipher import AES import base64 secret = "12345678912345678912345678912345" #由用戶輸入的16位或24位或32位長的初始密碼字元串 cipher = AES.new(secret) #通過AES處理初始密碼字元串,並返回cipher對象 s = cipher.encrypt("1234567891234567") #輸入需要加密的字元串,注意字元串長度要是16的倍數。16,32,48.. print s #輸出加密後的字元串 print base64.b64encode(s) #輸出加密後的字元串的base64編碼。 print cipher.decrypt(s) #解密
這是為了一開始接觸的小白(我)理解的,一般通用一點的處理方法可以參考http://www.jb51.net/article/114364.htm
至於為什麼要把已經加密後的字元串再用base64編碼,我覺得是對字元串的處理是基於二進位的,而base64的原理是在每6個二進位數的前面加兩個零,這樣的話,ascii對處理好的字元串編碼就全部可見了(起碼不是那些問號字元..),用charset模組去測試一下,發現也是像我所說。
DES演算法使用與AES的使用一樣,只不過要注意初始密碼字元串一定要是8位,而其他地方把AES換成DES就行(要是不回想配置環境的事情,Python還是很方便的..)
這個Crypto模組還有哈希演算法等其他一下加密演算法,如果有大神或者小夥伴把這個模組挖掘後,歡迎在下面留言哦,順便也教我使用咯,謝謝大家啦