【python RAS驗籤】RSA生成公鑰和私鑰,並驗籤
阿新 • • 發佈:2018-12-20
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)