最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python hmac模塊使用實例解析

 更新時間:2019年12月24日 14:57:27   作者:小粉優(yōu)化大師  
這篇文章主要介紹了Python hmac模塊使用實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

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

hmac模塊的作用:

用于驗證信息的完整性。

1、hmac消息簽名(默認(rèn)使用MD5加算法)

hmac_md5.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import hmac
#默認(rèn)使用是md5算法
digest_maker = hmac.new('secret-shared-key'.encode('utf-8'))
with open('content.txt', 'rb') as f:
  while True:
    block = f.read(1024)
    if not block:
      break
    digest_maker.update(block)
digest = digest_maker.hexdigest()
print(digest)

content.txt

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec
egestas, enim et consectetuer ullamcorper, lectus ligula rutrum leo, a
elementum elit tortor eu quam. Duis tincidunt nisi ut ante. Nulla
facilisi. Sed tristique eros eu libero. Pellentesque vel arcu. Vivamus
purus orci, iaculis ac, suscipit sit amet, pulvinar eu,
lacus. Praesent placerat tortor sed nisl. Nunc blandit diam egestas
dui. Pellentesque habitant morbi tristique senectus et netus et
malesuada fames ac turpis egestas. Aliquam viverra fringilla
leo. Nulla feugiat augue eleifend nulla. Vivamus mauris. Vivamus sed
mauris in nibh placerat egestas. Suspendisse potenti. Mauris massa. Ut
eget velit auctor tortor blandit sollicitudin. Suspendisse imperdiet
justo.

運行效果

[root@ mnt]# python3 hmac_md5.py 
79cbf5942e8f67be558bc28610c02117

2、hmac消息簽名摘要(使用SHA1加算法)

hmac_sha1.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import hmac

digest_maker = hmac.new('secret-shared-key'.encode('utf-8'), b'', digestmod='sha1')
# hmac.new(key,msg,digestmod)
# key:加鹽的key,
# msg:加密的內(nèi)容,
# digestmod:加密的方式

with open('hmac_sha1.py', 'rb') as f:
  while True:
    block = f.read(1024)
    if not block:
      break
    digest_maker.update(block)
digest = digest_maker.hexdigest()
print(digest)

運行效果

[root@ mnt]# python3 hmac_sha1.py 
e5c012eac5fa76a274f77ee678e6cc98cad8fff9

3、hmac二進制消息簽名摘要(使用SHA1加算法)

hmac_base64.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import hmac
import base64
import hashlib

with open('test.py', 'rb') as f:
  body = f.read()

# 默認(rèn)使用是md5算法
digest_maker = hmac.new('secret-shared-key'.encode('utf-8'), body, hashlib.sha1)
# hmac.new(key,msg,digestmod)
# key:加鹽的key,
# msg:加密的內(nèi)容,
# digestmod:加密的方式

digest = digest_maker.digest() # 默認(rèn)內(nèi)容是字節(jié)類型,所以需要base64
print(base64.encodebytes(digest)) #注意base64結(jié)果是以\n結(jié)束,所以Http頭部或其它傳輸時,需要去除\n

運行效果

[root@ mnt]# python3 hmac_base64.py 
b'Y9a4OMRqU4DB6Ks/hGfru+MNXAw=\n'

4、hmac摘要數(shù)據(jù)比較示例

hmac_pickle.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import hashlib
import hmac
import io
import pickle

def make_digest(message):
  "返消息摘要,加密碼后的結(jié)果"
  hash = hmac.new(
    'secret-shared-key'.encode('utf-8'),
    message,
    hashlib.sha1
  )
  return hash.hexdigest().encode('utf-8')

class SimpleObject(object):
  def __init__(self, name):
    self.name = name

  def __str__(self):
    return self.name

# 輸出緩沖區(qū)
out_s = io.BytesIO()
o = SimpleObject('digest matches')
pickle_data = pickle.dumps(o) # 序列化
digest = make_digest(pickle_data) # 使用sha1加密算法
header = b'%s  %d\n' % (digest, len(pickle_data))
print('提示:{}'.format(header))
out_s.write(header) # 將消息頭寫入緩沖區(qū)
out_s.write(pickle_data) # 將序列化內(nèi)容寫入緩沖區(qū)

o = SimpleObject('digest does not matches')
pickle_data = pickle.dumps(o)
digest = make_digest(b'not the pickled data at all')
header = b'%s  %d\n' % (digest, len(pickle_data))
print('提示:{}'.format(header))
out_s.write(header) # 將消息頭寫入緩沖區(qū)
out_s.write(pickle_data) # 將序列化內(nèi)容寫入緩沖區(qū)
out_s.flush() # 刷新緩沖區(qū)

# 輸入緩沖區(qū)
in_s = io.BytesIO(out_s.getvalue())

while True:
  first_line = in_s.readline()
  if not first_line:
    break
  incoming_digest, incoming_length = first_line.split(b'  ')
  incoming_length = int(incoming_length.decode('utf-8'))
  print('讀取到:', incoming_digest, incoming_length)

  incoming_pickled_data = in_s.read(incoming_length)

  actual_digest = make_digest(incoming_pickled_data) # 實際的摘要
  print('實際值:', actual_digest)

  if hmac.compare_digest(actual_digest, incoming_digest): # 比較兩個摘要是否相等
    obj = pickle.loads(incoming_pickled_data)
    print('OK:', obj)
  else:
    print('數(shù)據(jù)不完整')

運行效果

[root@ mnt]# python3 hmac_pickle.py 
提示:b'00e080735a8de379e19fe2aa731c92fc9253a6e2  69\n'
提示:b'1d147690f94ea374f6f8c3767bd5a5f9a8989a53  78\n'
讀取到: b'00e080735a8de379e19fe2aa731c92fc9253a6e2' 69
實際值: b'00e080735a8de379e19fe2aa731c92fc9253a6e2'
OK: digest matches
讀取到: b'1d147690f94ea374f6f8c3767bd5a5f9a8989a53' 78
實際值: b'4dcaad9b05bbb67b571a64defa52e8960a27c45d'
數(shù)據(jù)不完整

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

双鸭山市| 万载县| 余干县| 合水县| 两当县| 喀喇沁旗| 平邑县| 昌都县| 航空| 芜湖市| 大方县| 永宁县| 金塔县| 区。| 罗田县| 徐闻县| 禹州市| 勃利县| 翁牛特旗| 页游| 乌鲁木齐市| 博客| 沅江市| 南阳市| 常山县| 巴青县| 来安县| 普兰县| 兴山县| 康保县| 钟祥市| 马公市| 什邡市| 体育| 奉化市| 鄂伦春自治旗| 昌都县| 都安| 肥乡县| 如皋市| 义马市|