python中对RSA的加密和解密(通俗易懂,一看就会)

关于RSA非对称加密算法的完整原理和逻辑部分,可以参考维基百科

这里只介绍关于RSA加密解密的最少必要知识:

1加解密的流程:

首先由RSA库生成密钥,注意,这里的密钥包含私钥和公钥,是三个不同的概念。

要加密的内容,称为明文。

加密后的内容,称为密文。

设有一个场景:

翠花要写情书(明文)给二狗,但是情书又不能被人发现,于是就采用了RSA加密的方式来传递情书。

二狗先用RSA生成了一对密钥(有一个公钥,和一个私钥),翠花拿走公钥对情书A(明文)进行加密,生成情书B(密文)。二狗拿到情书B后,用手上的密钥,破解了B,把B还原为原来的A。这样一来,其他人因为没有私钥,无法查看他们之间的甜言蜜语,只有二狗一个人,知道其中的秘密。

这就是RSA加密作用。本质是,不让第三者看到原来信息的内容。

再设一个场景:

二狗要给翠花写情书,告诉她今晚12点村头桥下约会,那么,如何让翠花知道情书真是二狗写的呢。注意,二狗手上有私钥,翠花手上有公钥。这时,二狗把情书用私钥进行签名,带着签名和情书内容一同寄出给翠花,翠花拿着私钥验证签名,发现确实是二狗写的,怎么一来,她就完全可以相信情书的内容了。

这里的签名,本质上,是在允许信息内容别第三者发现的情况下,为了让信息接受者可以验证信息的真实性。

这就是RSA签名的作用

总结一下:

场景一:私钥加密,公钥解密

场景二:公钥签名,私钥验证。

代码实现:

首先,生成一对密钥,并保存

def create_keys():  # 生成公钥和私钥
    (pubkey, privkey) = rsa.newkeys(1024)
    pub = pubkey.save_pkcs1()
    with open('public.pem','wb+')as f:
        f.write(pub)

    pri = privkey.save_pkcs1()
    with open('private.pem','wb+')as f:
        f.write(pri)

对信息进行加密和解密的过程:

def encrypt():  # 用公钥加密
    with open('public.pem', 'rb') as publickfile:
        p = publickfile.read()
    pubkey = rsa.PublicKey.load_pkcs1(p)
    original_text = 'have a good time'.encode('utf8')
    crypt_text = rsa.encrypt(original_text, pubkey)
    print(crypt_text)
    return crypt_text  # 加密后的密文


def decrypt(crypt_text):  # 用私钥解密
    with open('private.pem', 'rb') as privatefile:
        p = privatefile.read()
    privkey = rsa.PrivateKey.load_pkcs1(p)
    lase_text = rsa.decrypt(crypt_text, privkey).decode()  # 注意,这里如果结果是bytes类型,就需要进行decode()转化为str

    print(lase_text)


if __name__ == '__main__':
    crypt_text = encrypt()
    lase_text =  decrypt(crypt_text)

猜你喜欢

转载自blog.csdn.net/xiongzaiabc/article/details/88400748