python使用Crypto进行SHA1WithRSA签名及签名验证,数据加解密

import base64
from Crypto.Signature import PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA

# 生成公钥和私钥
def GetKeyPair():
    #生成键值对
    key=RSA.generate(1024)
    print(key.export_key())
    print(key.publickey().export_key())
    private_key_str = base64.b64encode(key.export_key()).decode('utf-8')     #使用的是str类型
    public_key_str = base64.b64encode(key.publickey().export_key()).decode('utf-8')   #使用的是str类型的数据
    return (private_key_str,public_key_str)

(prik,pubk) = GetKeyPair()
# print(prik)
# print(pubk)

生成公钥和私钥。并将数据进行base64进行encode。

数据签名主要是用于身份认证,保证数据的真实性

签名是用的密钥进行加密,公钥进行签名验证

# 使用Crypto生成签名
def sign(privatekey,message):  #privatekey使用的是str类型的数据,message进行utf-8转byte类型
    private_key = RSA.importKey(base64.b64decode(privatekey.encode('utf-8')))
    cipher = PKCS1_v1_5.new(private_key)
    h = SHA.new(message.encode('utf-8'))
    signature = cipher.sign(h)
    return base64.b64encode(signature)


#使用Crypto进行签名验证
def design(publickey,signature,message):
    public_key=RSA.importKey(base64.b64decode(publickey.encode('utf-8')))
    verifier=PKCS1_v1_5.new(public_key)
    hash_object = SHA.new(message.encode("utf-8"))
    if verifier.verify(hash_object, signature):
        print("pass")
    else:
        print("error")

使用数据进行加解密,公钥进行加密数据,私钥进行解密数据

import base64
from Crypto.Signature import PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA
from Crypto.Cipher import PKCS1_v1_5 as pknew

message='测试啊,不知道行不行'
privatek='LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlDV3dJQkFBS0JnUURKQzhsajJEVzE3dStKQWE0NHdCMjRjWEFWaFlQaGV5VEtzN09WQWhDT21oTGoxd2V0CktNT0FaQzBZYTJ6ellHdTJBTEM5dVdwYis3QnhBMWNZeGFXRTVZNC9kYXRhSE5vVEUxcjgzcHU1UXNxcXdqS00KNTZ4c0FRbnZnZWVSRDkwb3lqTUdXQnVGRzhVTVdoSXdab2FQOTZaSWVPMU5uMlAvdkgyTHRIYkp3UUlEQVFBQgpBb0dBREpmQmFKQ2RaS1R2dWd3eDVub2FJbmh3aGRpVUZ5YUllbTNoSEw5QlhEMUlXNThYYXdBM3BxNGZxUHpwCm1TRDcvaTF5NUo5ZGl4OXJ3Tmh0dHk2Q0hJRmg0ZXVVZGZxZFVkZmNOV0dvaUxVdDZTNlovOCs2UnZOS3JIUVUKM1VWWndacWtyME0rb0RGN0ZYOXZTNGp6SDZvSFdkbk0xQmlqRFpGWU1ZN1dFWFVDUVFEUUtqMlh6b3N0SkV3UApTU2s1N2lUUDNCOFRqck15b3JRNFF1czFBNlpqa3NOMXJTbk52aGNJK0hwb2F2ZzFQWmc4NWZVUkNtdjlDQ3FjCkZzVnZUUGFqQWtFQTl6N0IrbWFvZENhQVNQbzlDNFVWWHYvY0tTd0dnRFlFQk10Ris5eHBRYVh5anJDR0RDWTIKSUpCa0l4NjFkdWRFM096Y1NIbXVkN0Z4c2ZpMXZmdllTd0pBR2NRZ3U1bWxRSUV0cVBhMVU2WldpQ1FHOUxURgpHWTlxSDB5cE1IYXpNY0FJMFpnTmhKbnkzL2xocldzUUxnYmh3U2YxblpaY3A0VkxRT2JRcVdZdFlRSkFSZ0lhCk1RbnlkdmtUNkJZYlJQREpEVjVMZThrQWlqdEJSZzQ4NGNVV2RNVkZla3ZYbVFjVTJvR29LUjJmNm13djNwS2YKQ1ZLVEtVY3dWMkdDTEtwc0l3SkFXNk96TlVMRmk3SlF6amN6YjM0TW1ZaGJaUFRlSHlsbVFud2xjKzBtVmwzUQowOVRjT2l1dytsRWF4aWJIVjQwWE5jNTR4eUpYejYxbS9nNTlOYkZFdGc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ=='

publick='LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FESkM4bGoyRFcxN3UrSkFhNDR3QjI0Y1hBVgpoWVBoZXlUS3M3T1ZBaENPbWhMajF3ZXRLTU9BWkMwWWEyenpZR3UyQUxDOXVXcGIrN0J4QTFjWXhhV0U1WTQvCmRhdGFITm9URTFyODNwdTVRc3Fxd2pLTTU2eHNBUW52Z2VlUkQ5MG95ak1HV0J1Rkc4VU1XaEl3Wm9hUDk2WkkKZU8xTm4yUC92SDJMdEhiSndRSURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ=='

private_key = RSA.importKey(base64.b64decode(privatek.encode('utf-8')))
public_key=RSA.importKey(base64.b64decode(publick.encode('utf-8')))

#对数据进行加密,输出后进行解密数据

# 创建加密器并使用公钥进行加密
cipher = pknew.new(public_key)
encrypted_message = cipher.encrypt(message.encode('utf-8'))
print(encrypted_message)



# 使用私钥进行解密
decipher = pknew.new(private_key)
decrypted_message = decipher.decrypt(encrypted_message, sentinel=None)
print(decrypted_message.decode('utf-8'))

你可能感兴趣的:(python,开发语言)