import os
import base64
import rsa
# 安裝pycrypto
from crypto import random
from crypto.hash import sha256
from crypto.publickey import rsa
from crypto.signature import pkcs1_v1_5 as signature_pkcs1_v1_5
"""function 2:
openssl genrsa -out ./myprivatekey.pem -passout pass:"密碼" -des3 2048
openssl rsa -pubout -in ./myprivatekey.pem -passin pass:"密碼" -out ./mypublickey.pem
"""def gen_sign(unsign_data, secret):
"""兩種方式生成簽名:
這是第一種
1. 開啟檔案方式,見所有被注釋的部分,檔案為.pem
2. passphrase 的引數為檔案加密的密碼
:return: 簽名資料
"""path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
doc = os.path.join(path, 'myprivatekey.pem')
with open(doc) as pk:
key_data = pk.read()
rsakey = rsa.importkey(key_data, passphrase=密碼)
signer = signature_pkcs1_v1_5.new(rsakey)
digest = sha256.new()
digest.update(unsign_data.encode('utf8'))
sign = signer.sign(digest)
signature = base64.b64encode(sign)
print(signature)
return signature
def gen_sign(private_key, unsign_data, secret):
"""兩種方式生成簽名:
1. 是直接讀取私鑰的方式和未加籤的資料
:return: 簽名資料
"""rsakey = rsa.importkey(base64.b64decode(private_key), passphrase=secret)
signer = signature_pkcs1_v1_5.new(rsakey)
digest = sha256.new()
digest.update(unsign_data.encode('utf8'))
sign = signer.sign(digest)
signature = base64.b64encode(sign)
print(signature)
return signature
def verify_sign(data, sign, secret):
"""讀取公鑰檔案,驗籤
"""path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
doc = os.path.join(path, 'myprivatekey.pem')
with open(doc) as pk:
key_data = pk.read()
rsakey = rsa.importkey(key_data, passphrase=b'密碼')
verifier = signature_pkcs1_v1_5.new(rsakey)
digest = sha256.new()
digest.update(data.encode('utf8'))
is_verify = verifier.verify(digest, base64.b64decode(sign))
print(is_verify)
return is_verify
def verify_sign(pubkey, data, sign, secret):
"""直接傳公鑰方式
"""rsakey = rsa.importkey(base64.b64decode(pubkey), passphrase=secret)
verifier = signature_pkcs1_v1_5.new(rsakey)
digest = sha256.new()
digest.update(data.encode('utf8'))
is_verify = verifier.verify(digest, base64.b64decode(sign))
print(is_verify)
return is_verify
if __name__ == '__main__':
pass
pass 公鑰,私鑰,加密和簽名
加密和簽名是兩個不同的概念,又都涉及公鑰和私鑰的概念。公鑰和私鑰相當於鑰匙和鎖,鎖可以用來鎖住東西,鑰匙可以用來開啟對應的鎖,一把鑰匙只能開一把鎖,當然鑰匙和鎖都可以複製。加密相當於我自己生成一把鎖和一把鑰匙,然後把鎖發給你,你用我的鎖把想發給我的東西鎖上再發給我,我收到之後用鑰匙開啟鎖。天下人都能...
公鑰加密和私鑰簽名
本文 自感謝逆水行舟,不進則退的分享。一 公鑰加密 假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來作為私鑰,不告訴你們,然後我告訴大家,1是我的公鑰。我有乙個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用...
生成公鑰和私鑰
和第三方服務互動的時候。經常需要生成私鑰和公鑰。用git bash開啟之後。使用命令生成。openssl genrsa out allinpay.key 1024 openssl req new x509 key allinpay.key out allinpay.cer 依次填寫相關資訊。生成兩個...