1. 程式人生 > >【python RAS驗籤】RSA生成公鑰和私鑰,並驗籤

【python RAS驗籤】RSA生成公鑰和私鑰,並驗籤

1、RSA加密解密過程 公鑰加密,私鑰解密

2、RSA驗簽過程

私鑰產生簽名,公鑰驗證簽名

1.服務端產生公鑰和私鑰
私鑰,去掉換行,空格,頭部,利用阿里的工具轉成pkcs8給客戶端
2.客戶端用私鑰對需要驗籤的引數,得到簽名,用base64工具類加密一次
把需要驗籤的引數和簽名傳到服務端
3.服務端直接用python產生的公鑰(不做任何處理),驗證引數和解密之後的簽名,看是否通過

python 自動生成公鑰和私鑰:

# -*- coding:utf-8 -*-
import rsa
import base64


# 生成RSA公鑰和祕鑰,經過base64轉碼
(pubkey, privkey) = rsa.newkeys(512)

# 經過base64編碼
# pubkey = base64.encodebytes(pubkey.save_pkcs1())
# privkey = base64.encodebytes(privkey.save_pkcs1())


# 原始
pubkey = pubkey.save_pkcs1()
privkey =privkey.save_pkcs1()
print(pubkey)
print(privkey)


# 給java的pkcs1
privkey=str(privkey).replace('\\n','').replace("b'-----BEGIN RSA PRIVATE KEY-----",'').replace("-----END RSA PRIVATE KEY-----'",'').replace(' ','')
print(privkey)

pythonRSA驗籤:

import rsa
import base64

privkey_str= base64.decodebytes(b'LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlCUEFJQkFBSkJBSnFaOTkzZ28xMTE3\nZkNxVDJQZ3Jkc3VyYTRyNkR2UlM5dzZubm5UaHNvOVF5bWxjYzFFClRFYy9xWDRjbGNaZll3YVls\nNWcycnZkNWcvcmFKcGs2bjQwQ0F3RUFBUUpBUHhQQXlMc2xqRFZZYmsvZWNsNnkKTUhJOEZJci9o\ncUJmTml5SWlpWWVWQXJESGdGL3JjQnp3WkNKeUlCZk1MNkcySnR2WUxRYXpVdG5lbXg2MFFXSQo5\nUUlqQUw0UjRZR3hjTndoSmt4ei85YXdlbmV5ZGNySUc4Q0svOU5WNGFpaFVVOG1aNnNDSHdEUU9v\nSVlzRXVuCnJoL3JaK3JvUUZXL2JFaUl4YnRvS3NxQ3Njc3IvYWNDSXdDME1kZU5VV0FpRWZ0eE4v\nZ3czWmI5cTk4b3BKWksKOEh5aEt5YUk3SWRkZHBlSkFoNGVlc0g2VFN2MTBuWVhwakZyWjZkbGly\nc2ZVaG81aURIMmFZSDg0WGNDSWpiWgpHUzBYYzJRUC92cS9VUDFiT1pOeWJ0TlVGY0NuWGwrQjlp\nSEtOcGNCcGZnPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=\n')
print(privkey_str)
privkey = rsa.PrivateKey.load_pkcs1(privkey_str)

pubkey_str= base64.decodebytes(b'LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1FZ0NRUUNhbWZmZDRLTmRkZTN3cWs5ajRL\nM2JMcTJ1SytnNzBVdmNPcDU1MDRiS1BVTXBwWEhOUkV4SFA2bCsKSEpYR1gyTUdtSmVZTnE3M2VZ\nUDYyaWFaT3ArTkFnTUJBQUU9Ci0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K\n')
print(pubkey_str)
pubkey = rsa.PublicKey.load_pkcs1(pubkey_str)


message = b'Go left at the blue tree'
hash = rsa.compute_hash(message, 'SHA-1')
signature = rsa.sign_hash(hash, privkey, 'SHA-1')
#
print(signature)


message = b'Go left at the blue tree'

# signature=b'v\xd1J\xd4{-m\x83CK\xd9\x9a\xc3>22\x02\x07n\xb8LGwK\x96\x88D\xde\xe7""\x98\x1d\x92\xb0l\x8b\x1f\xd8\xc1\xa0\x10\xae\xe3L\xb0s\xe6<\xbf<\x05\x94\x03z\xae\x83VK\xe7s\x11\xf5J'
r = rsa.verify(message, signature, pubkey)
print(r)