python加密模塊教程_Python加密模塊的hashlib,hmac模塊使用解析

ebb0cd79d49cf6d02b168bc4f5dda777.png

這篇文章主要介紹了Python加密模塊的hashlib,hmac模塊使用解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在寫搬磚腳本中,碰到一個加密的信號標簽文件無法運行。

import hashlib

import time

m = hashlib.md5()

api_key = ""

api_secret = ""

params = {"api_key":api_key, "time":int(time.time()), "symbol":"btclcny"}

def sign( data , secret ):

signStr = ""

keys = data.keys()

keys = sorted(keys)

for key in keys:

signStr = signStr + key

signStr = signStr + bytes(data[key])

pass

signStr += secret

m.update(signStr)

return m.hexdigest()

print sign( params , api_secret )

實在搞不懂寫的人的意思,里面有字符串與字節碼的相加?反正就是跑不起來,隨便我這個加密模塊也用的少,這次就給自己記錄學習的機會來了。

媽的,這個平臺太垃圾了,接口有問題的,浪費我好長時間,后面還去看了它的PHP代碼,看的腦子發麻,后來仔細研究了傳入 params,里面的接口文檔寫的亂七八糟,浪費時間。一萬頭草泥馬飛過。

切入主題,先講hashlib,后面介紹hmac,有時間下一個章節,把base64還有io,以及pickle,json,shelve,fileinput.

概念:

Python的hashlib提供了常見的摘要算法,如MD5,SHA1等等。

什么是摘要算法呢?摘要算法又稱哈希算法、散列算法。它通過一個函數,把任意長度的數據轉換為一個長度固定的數據串(通常用16進制的字符串表示)。所以看來的hash加密值沒有超過字母f的

后面可以測試每種加密手法的輸出字段長度,也可以知道具體輸出的Byte字節數(一個16進制的數對應4位)。

"""初始化對象"""

h1 = hashlib.md5()

h2 = hashlib.new("md5")

h3 = hashlib.md5()

h1.update(b"123") # 進行摘要

h2.update("123".encode())

h3.update(b"1")

h3.update(b"23")

print(h1.hexdigest()) # 取值

print(h2.hexdigest())

print(h3.hexdigest())

202cb962ac59075b964b07152d234b70
202cb962ac59075b964b07152d234b70
202cb962ac59075b964b07152d234b70

一共有兩種實例化的方法,一般介紹都是第一種。記住,進行進行md5摘要時,對象一定是二進制數據。

update其實可以分開用,只要里面的數據沒有變,分開用書上介紹對大文件操作會更加快。

由于這樣直接加密,沒有添加輔助字符,假如是用戶的密碼設置的很簡單,很容易通過加密后的數據也能反向分析出密碼,所以要添加一些干擾詞匯。

hmac也是干擾加密的另外一種相對看過去比較高級的寫法。

add_word = b"haha" # 把這個當做加密鹽,

hh1 = hashlib.md5()

hh1.update(add_word + b"jiujiu")

print(hh1.hexdigest())

hh2 = hashlib.md5()

hh2.update( b"jiujiu" + add_word)

print(hh2.hexdigest())

m = hmac.new(add_word) # 這個跟hashlib的寫法有點類似,默認是md5加密

m.update(b"jiujiu")

print(m.hexdigest())

h_md5 = hmac.new(add_word, b"jiujiu").hexdigest() # 這是另外一種方式,直接加密后取值。

h_sha1 = hmac.new(add_word, b"jiujiu", "sha1").hexdigest()

h_sha224 = hmac.new(add_word, b"jiujiu", "sha224").hexdigest()

h_sha256 = hmac.new(add_word, b"jiujiu", "sha256").hexdigest()

h_sha512 = hmac.new(add_word, b"jiujiu", "sha512").hexdigest()

print(h_md5, len(h_md5), sep="======>num")

print(h_sha1, len(h_sha1), sep="======>num") # 通過輸出可以看出,md5輸出32個16進制數字,一共128位

print(h_sha224, len(h_sha224), sep="======>num") # sha1輸出40個數字,所以為160位,剩下的sha后面的數字就代表輸出幾位。

print(h_sha256, len(h_sha256), sep="======>num")

print(h_sha512, len(h_sha512), sep="======>num")

3e289c523f955430bce2e47a14d4934b

eb01e09a1fe2bfd95d8f31c8ae544faf

ef84bc9ee2bf91d1789227d82193d7a9

ef84bc9ee2bf91d1789227d82193d7a9======>num32

fbd95ddafdac6352cdf3d9d4e8c6d2421c80e56c======>num40

60d1896d00e73bc67469a58b39ded91c60c162eda0f44306f7d08d58======>num56

b36f8977bba6265612bc338b89c698d17cff7ccfb81b7d7a434f0ad889995e26======>num64

043f51bd410f9d328ca0ab0913ddfde9c2519f639c74447a1516811b8920b125aa6f4d3977c83e038e82c39103ac2a3bbdd5235c9c95fc030a267cdf0d578696======>num128

從整個代碼的操作來看還是比較簡單,至少比我想象的簡單,加密的邏輯我也不懂,我也知道密碼學很高級,就我這小學三年級的數學有空再看吧。

hmac只不過是一種機器加密的手段,但我試過了,無論我把這個加密鹽放加密字節碼的前面或者后面,跟hmac出來的效果不一樣,看來它有自己的拼接加密算法。

至于sha1,sha256,sha512就比較容易記住了,md5是32個16進制數輸出,所以包含bit是128位,sha1是是輸出40個16進制數,所以是160個bit,剩下的比較好理解,后面的數字代表了幾個bit位。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持云海天教程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371776.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DAO層–救援通用

泛型可以是使用編譯時驗證(類型安全性)的功能來創建可重用代碼的強大工具。 不幸的是,我感到主流開發人員仍然對此感到恐懼。 但是,比喻海格的蜘蛛,我會說泛型是被嚴重誤解的生物……:-) 我希望以下示例可以證明它們…

ThreadLocal詳解(實現多線程同步訪問變量)

ThreadLocal翻譯成中文比較準確的叫法應該是:線程局部變量。 這個玩意有什么用處,或者說為什么要有這么一個東東?先解釋一下,在并發編程的時候,成員變量如果不做任何處理其實是線程不安全的,各個線程都 在操…

SCREEN屏幕編程時候必須保證SCREN中詞典的字段格式必須和數據表中字段的類型長度一致!...

此時任意操作都會出現如下問題 /h調試 回車調試被激活任意操作 執行到第23行時候報錯“請輸入一個數值”,檢查數據表中字段參考數據元素以及對應的域均是char類型,此時檢查screen屏幕設置字段類型,/n退出程序 重新進入程序 單擊 點擊屏幕9000…

mysql 阿里云 版本_關于阿里云centos版本,mysql5.7的一些注意事項

1.阿里云進去mysql是默認已經安裝好了的,只需要修改root用戶的密碼。關于修改密碼:1)登陸阿里云,進入root目錄,會有mysql的.sh文件,可以通過運行該文件得到初始密碼。此時用初始密碼登陸mysql,use mysql 切…

JAXB –不需要注釋

似乎存在一個誤解,認為在模型上需要使用批注才能使用JAXB(JSR-222)實現。 事實是,JAXB是例外配置,因此僅當您要覆蓋默認行為時才需要注釋。 在此示例中,我將演示如何在不提供任何元數據的情況下使用JAXB。 …

zabbix 3.0.3 (nginx)安裝過程中的問題排錯記錄

特殊注明:安裝zabbix 2.4.8和2.4.6遇到2個問題,如下:找了很多解決辦法,實在無解,只能換版本,嘗試換(2.2.2正常 | 3.0.3正常)都正常,最后決定換3.0.31、Error connecting …

安裝mysql5.7.24rpm_centos7安裝mysql-5.7.24(rpm安裝)

關于mysql的4個rpm包node[rootelk-200 ~]# ls mysql/ -lhtotal 192M-rw-r--r-- 1 root root 25M Aug 26 12:38 mysql-community-client-5.7.24-1.el7.x86_64.rpm-rw-r--r-- 1 root root 275K Aug 26 12:38 mysql-community-common-5.7.24-1.el7.x86_64.rpm-rw-r--r-- 1 root ro…

Java鎖實現

我們都使用第三方庫作為開發的正常部分。 通常,我們無法控制其內部。 JDK隨附的庫是一個典型示例。 這些庫中的許多庫都使用鎖來管理競爭。 JDK鎖具有兩種實現。 人們使用原子CAS樣式指令來管理索賠過程。 CAS指令往往是最昂貴的CPU指令類型,并且在x86上…

一鍵生成APP官網

只需要輸入蘋果下載地址,安卓市場下載地址,或者內測下載地址,就能一鍵生成APP的官網,方便在網上推廣。 好推APP官網 www.hotapp.cn/app 轉載于:https://www.cnblogs.com/likwo/p/6223889.html

python 字符ab+字符c 2_“ab”+”c”*2 結果是: (1.3分)_學小易找答案

【判斷題】藥物效應動力學簡稱藥效學,是研究藥物對機體的作用?【單選題】以下關于Python語言中“縮進”說法正確的是:?????????????????????????????????????????????????????????????????????????…

數據結構及算法 -- 目錄

排序算法 -- 目錄 啦啦啦轉載于:https://www.cnblogs.com/ClassNotFoundException/p/7122848.html

Spring MVC集成測試

在Spring MVC中對控制器進行集成測試的一種方法是使用Spring提供的集成測試支持。 對于Junit4,此支持包括一個名為SpringJunit4ClassRunner的自定義Junit Runner和一個用于加載相關Spring配置的自定義批注。 樣本集成測試將遵循以下原則: RunWith(Spri…

spark 快速入門 java API

Spark的核心就是RDD,對SPARK的使用入門也就是對RDD的使用,包括action和transformation 對于Java的開發者,單單看文檔根本是沒有辦法理解每個API的作用的,所以每個SPARK的新手,最好按部就班直接學習scale, 那才是一個高…

網頁設計上機考試原題_Dreamweaver上機考試題目dreamweaver試題庫網頁制作試題.doc...

網頁設計上機考試題集注意:所有題目中涉及的素材都在考試文件夾內,其中圖片在下面的pic文件夾中,音樂、flash在media文件夾。1) 在1.html中的頂部添加一個錨點鏈接,點擊之能立即到達頁面最底端。2) 將1.html中的所有鏈接的默認樣式…

35數據結構與算法分析之---最短路徑

本系列是閱讀《數據結構與算法應用實踐教程》第2版 主編 李文書 北京大學出版社 的讀書筆記,加上自己的理解,更多的是學習的記錄與反思,如有不妥,歡迎指正,非常感謝。轉載于:https://www.cnblogs.com/guochaoxxl/p/712…

Quartz 2 Scheduler示例

Quartz是一個開源作業調度框架。 它可用于管理和計劃應用程序中的作業。 步驟1:建立已完成的專案 創建一個Maven項目,如下所示。 (可以使用Maven或IDE插件來創建它)。 步驟2:圖書館 Quartz依賴項已添加到Maven的po…

sql server 2008 com.microsoft.sqlserver.jdbc.SQLServerException: 通過端口 1433 連接到主機

原內容搬遷到了新網站,給你帶來的不便,敬請諒解! 》 http://www.suanliutudousi.com/2017/08/28/sql-server-2008-com-microsoft-sqlserver-jdbc-sqlserverexception-%E9%80%9A%E8%BF%87%E7%AB%AF%E5%8F%A3-1433-%E8%BF%9E%E6%8E%A5%E5%88%B0…

如何通過網線連接兩臺電腦快速傳輸數據?

介紹 我們經常需要拷貝文件會用到類似U盤等工具,但我們有時在傳輸大文件時又苦于沒有,那么大內存的轉存工具。這時候我們就可以通過一條小小的網線連接兩臺電腦,形成一個小的局域網傳輸數據,因為是通過網線傳輸,所以傳…

30分鐘內使用MongoDB

最近,我被NoSQL錯誤咬住了-或是我的同事Mark Atwell提出的“燃燒在哪里!” 運動。 盡管我無意于在不久的將來或可預見的將來回避友好的“ SELECT ... WHERE”,但我確實設法弄懂了一些代碼。 在本文中,我分享了我在NoSQL世界中首次…

【Django】--ModelForm組件

ModelForm a.class Meta:model,#對應Model的  fieldsNone,#字段  excludeNone,#排除字段  labelsNone,#提示信息  help_texts None,#幫助提示信息  widgets None,#自定義插件  error_messages None,#自定義錯誤信息(整體錯誤信息from django.core.exceptions im…