RSA算法的加密、解密、签名/验证签名

一、题目

1、用Python或Sage实现RSA算法的加密、解密、签名/验证签名

2、用Python或Sage实现DH秘钥交换协议的。

3、请提交代码的网页链接,不要提交代码压缩包。


二、平台

Anaconda的spyder  ( Python3.6 )


三、安装rsa模块(参考文章    Python进行RSA加密     Python 安装RSA模块  )


(1)Python中的一些模块是用一个包管理器来发布的,RSA模块就是这样,所以首先需要安装setup tools工具

         下载文件ez_setup.py

2) 用python解释执行它 

(3) 安装完成后,会在scripts文件夹下生成几个exe可执行文件。(如: f:\Python3.6\Scripts目录下)

(4) 下载RSA安装包rsa-3.1.1-py3.2.egg

(5)把之前下载的文件rsa-3.1.1-py3.2.egg拷贝到f:\Python3.6\Scripts目录下, 然后在cmd中cd到D:\Python3.6\Scripts目录下,用这个命令执行egg文件:easy_install.exe rsa-3.1.1-py2.7.egg

四、实现过程

import  rsa
"生成公钥和私钥"

(mypubkey,myprivkey)=rsa.newkeys(1024)

"保存密钥"

with open('./mypublic.pem','w') as f:
    f.write(mypubkey.save_pkcs1().decode())

with open('./myprivate.pem','w') as f:
    f.write(myprivkey.save_pkcs1().decode())

"导入密钥"
with open("./mypublic.pem","r") as f:

    mypubkey = rsa.PublicKey.load_pkcs1(f.read().encode())

with open("./myprivate.pem","r") as f:
    myprivkey = rsa.PrivateKey.load_pkcs1(f.read().encode())
      
"明文"
message = "HelloWorld"

 
 
"公钥加密encrypt"
def encrypt(message):
    PublicKey=open("./mypublic.pem","r")
    encryptor = rsa.encrypt(message.encode(), mypubkey)
    enData=encryptor.encrypt(message,0)
    file=open("./crypt.txt","enc")
    file.write(enData[0])
    file.close()
if __name__=="__main__":
    encryptedThingy=encrypt("message")


"私钥解密"
def decrypt():
    PrivateKey=open("./myprivate.pem","r")
    message = rsa.decrypt(crypto, myprivkey).decode()
    decryptor=rsa.importkey(PrivateKey,passphrase="pass")
    retval=none
    file=open("./crypt.txt","dec")
    retval=decryptor.decrypt(file.read())
    file.close()
    return retval
if __name__=="__main__":
    decryptedThingy=decrypt()
    print(message)
"私钥签名"
def sign(message):
    privatekey=open("./myprivate.pem","r")
    privator = rsa.importKey(privatekey)
    signature = rsa.sign(message.encode(), myprivkey, 'SHA-1')
    hash_obj = SHA.new(message)
    signer = PKCS1_v1_5.new(privatekey)
    sn= encode(signer.sign(hash_obj))
    file = open("./sign.txt", "s")
    file.write(sn)
    file.close()
if __name__== "__main__":
    print rsa.sign("message")
"公钥验证"
def verify(message):
    publickey = open('./myPublicKey.pem', 'r')
    publor = RSA.importKey(publickey)
    verifying=rsa.verify(message.encode(), signature, mypubkey)
    h = SHA.new(message)
    verifier = PKCS1_v1_5.new(public_key)
    sn = decode(sign_file.read())
    file = open('./sign.txt', 'v')
    file.close()
    return verifier.verify(h, sn)
if __name__=="__main__" :
    print rsa.verify("message")


猜你喜欢

转载自blog.csdn.net/lyt_mico/article/details/80292246
今日推荐