Python的RSA操作(私钥与公钥)

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。


RSA公开密钥密码体制的原理是:

根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥 。



关于RSA的通俗的解释:

使用规定的方法生成一对密钥,一个作为私钥,一个作为公钥;

一段数据通过私钥加密,必须通过公钥解密;反之亦然。

私钥自己保管,公钥对外公开。

比如:理思录的私钥A(理思录),公钥B(理思录)

九赢百信的私钥C(九赢百信),公钥D(九赢百信)

比如:九赢百信希望发送一条信息M给理思录,不希望他人知晓传输的内容,即便获取了数据,也不能解析其中的内容。那么这个人就用公钥B(理思录)去加密这个信息M,变成了X。

当理思录收到了X,就用自己的私钥A(理思录)去解密,解密后才能看到真正的信息M。

这样,理思录可以收到信息M,可是并不知道信息是谁发出的。

为此,信息M在九赢百信发送信息之前,使用自己的私钥C(九赢百信)将信息M加密为N,可以附加自己的公钥信息,然后再通过公钥B(理思录)进行另外一次加密,成为P。

这样,当理思录收到P,之后,先用自己的私钥A(理思录)解密,然后使用公钥D(九赢百信)进行解密。

公钥的公布需要一些类的规定和程序,保证他是可信性。

双钥技术的加密和解密耗费的时间比较大,通常使用这种技术来传输密码,通过密码来解密要传输的数据。

现在用python调用库实现RSA密钥的生成。

安装:pip install rsa



#pip install rsa
import rsa
(pubkey,privkey)=rsa.newkeys(1024)
print(pubkey)
print(privkey)

pub=pubkey.save_pkcs1()
pubfile=open('public.pem','wb')
pubfile.write(pub)
pubfile.close()

pri=privkey.save_pkcs1()
privkey=open('private.pem','wb')
privkey.write(pri)
privkey.close()



生成的文件如下图:



import rsa
 
 
# rsa加密
def rsaEncrypt(str):
    # 生成公钥、私钥
    (pubkey, privkey) = rsa.newkeys(512)
    print("公钥:\n%s\n私钥:\n:%s" % (pubkey, privkey))
    # 明文编码格式
    content = str.encode("utf-8")
    # 公钥加密
    crypto = rsa.encrypt(content, pubkey)
    return (crypto, privkey)
 
 
# rsa解密
def rsaDecrypt(str, pk):
    # 私钥解密
    content = rsa.decrypt(str, pk)
    con = content.decode("utf-8")
    return con
 
 
if __name__ == "__main__":
 
    str, pk = rsaEncrypt("hello")
    print("加密后密文:\n%s" % str)
    content = rsaDecrypt(str, pk)
    print("解密后明文:\n%s" % content)




===================== RESTART: E:/python code/其他/RSA_T01.py ====================

公钥:

PublicKey(9111873236249849209686819369076356655660892337807985520901675955833176249049269417595657300043866173262409777435981355116449943828841734063225123542228361, 65537)

私钥:

:PrivateKey(9111873236249849209686819369076356655660892337807985520901675955833176249049269417595657300043866173262409777435981355116449943828841734063225123542228361, 65537, 2265976623958985648099177290342958340692451948084205075295718673850940787996298407753473721435820250048228469715958524626179351450461377903271599676389673, 5159625978049603036154695303556767905690916535211950049558224975601481091096127691, 1765994914168999577067848938883684661085876986183189630983114088404405371)

加密后密文:

b'f\xbe\xb8\xfd\xa9#\n\x98\xc3\xc0{\xd0n\x17\x10\xfb^\xfd\xdf(\xb41\x1e\x06Ij\xd8\x9a\xd2P\xc2]H\xa4\xeb$\xbd+}b\xd4\x1a \xfb\xee:E\xd0r\x0e\xdcH\xb0v\xd8\xc4\xb1\x94Q\xda,\xc2\xbd\xdd'

解密后明文:

hello

相关文章

「强强联合」在Power BI 中使用Python(1)——导入数据

编辑搜图请点击输入图片描述近几年,Python是越来越火了,就连地产大佬潘石屹都在年近不惑之时开始学习Python编程语言,我们做数据分析和运营的怎能不熟练运用呢?编辑搜图图片模糊,建议替换或删除×请...

Pycharm导入python项目

进入PyCharm后,点击File→Open,然后在弹窗中选择需要导入项目的文件夹;打开了python项目后,需要配置该项目对应的python才可以正常运行;配置步骤:File→settings在设置...

零基础到发布:手把手教你创建并分发 Python 自定义库

作为程序员,我们经常依赖各种外部库来解决不同的问题。这些库由技术娴熟的开发者创建,为我们提供了节省时间和精力的解决方案。但你是否曾想过:“我也能创建属于自己的自定义库吗?”答案是肯定的!本文将为你详细...

彻底搞懂Python 中的 import 与 from import

对不少 Python 初学者来说,Python 导入其他模块的方式让他们很难理解。什么时候用import xxx?什么时候用from xxx import yyy?什么时候用from xxx.yyy...

python首行代码import *,from * import * 解析

python代码,一般第一行代码都是import *或from * import *,作用是导入功能模块,然后利用模块内的函数编写代码,减少大量的代码编写时间,是python的一大特色。但是,在实际写...