即插即用demo系列 RSA驗證

2021-07-22 07:49:21 字數 2261 閱讀 2301

注意:請先自行裝好crypto

# coding=gbk

__author__ = 'linyc'

import os

import base64

from crypto.publickey import rsa

from crypto.signature import pkcs1_v1_5 as pkcs

from crypto.hash import md5 as hash

#from crypto.cipher import arc4 as rc4

# 組織加密明文形式 支援入參為列表、字典和字串。列表和字典統一轉化為特定格式的字串

# 如果入參是字典,注意鍵值排序!網路傳輸可能會打亂key順序,導致對應的字串不同,驗證會失敗!

def _to_content(data, skip_keys):

if isinstance(data, dict):

ks = data.keys()

ks.sort()

content = '&'.join([i + '=' + data[i]

for i in ks

if data[i] and (i not in skip_keys) ])

elif isinstance(data, list):

content = '&&&'.join(data)

else:

content = data

if isinstance(content, unicode):

content = content.encode('utf-8')

return content

# 簽名驗證,即獲取sgn,自己再用公鑰加密自己收到的內容,比對兩個sgn

def _transfer_verify(data, sgn, public_signer):

verf_skip_keys = {}

content = _to_content(data, verf_skip_keys)

h = hash.new(content)

sgn = base64.decodestring(sgn)

return public_signer.verify(h, sgn)

# 簽名,即用私鑰,將自己要傳送的內容加密成sgn

def _transfer_sign(data, private_signer):

sign_skip_keys = {}

content = _to_content(data, sign_skip_keys)

h = hash.new(content)

sgn = private_signer.sign(h)

return base64.encodestring(sgn).translate(none, ' \r\n')

# rsa加密

def _rsaadd(message):

data = message

dpath = os.path.dirname(__file__)

with open(os.path.join(dpath, 'private_key.pem')) as f:

prikey = rsa.importkey(f.read())

private_signer = pkcs.new(prikey)

# 生成密文

sgn = _transfer_sign(data, private_signer)

return sgn

# rsa解密 如果驗證通過,返回true

def _rsarelease(sgn, data):

dpath = os.path.dirname(__file__)

with open(os.path.join(dpath, 'public_key.pem')) as f:

pubkey = rsa.importkey(f.read())

public_signer = pkcs.new(pubkey)

return _transfer_verify(data, sgn, public_signer)

if __name__ == "__main__":

data = '需要被驗證的傳送內容message'

sgn = _rsaadd(data)

print sgn

ismatch = _rsarelease(sgn, data)

print ismatch

執行截圖:

ThinkEco 即「插」即用 讓空調制智慧型

幾個月前,通用電氣和quirky聯手推出了aros智慧型空調,它是一款很酷的家庭電器。不過要讓空調制智慧型而換一台的話,成本又太高了,智慧型空調小工具thinkeco smartac就能以廉價的方式讓傳統空調制智慧型。當使用者外出時,thinkeco允許使用者調節空調溫度,這樣做可以更加節能,此外它...

RAC學習筆記 GPnp 網格即插即用

從11gr2的新功能,提供建立動態的gi環境,雖隨著負載動態改變gi環境。gpnp能非常容易的新增 替換 刪除。gpnp 主要由gpnpd mdns scan gns mdns負責在節點內部進行ip的解析,在新增節點的時候不需要手動修改每個節點的 etc hosts檔案 gpnpd服務提供集群的配置...

PHP匯出Excel極簡方法,即插即用

整理匯出excel開始 creator six data 2018 11 22 desc 資料匯出到excel檔案 param datasix 需要匯出的資料主體 param tablesix excel檔案主體 public function exportsix tablesix 通過header...