Python实现RSA加密算法,让你的信息更加安全

一、什么是编码

       想要实现加密就必须要先了解什么是编码。

       编码是信息从另一种形式或格式转换为另一种形式或格式的过程,解码则是编码的逆过程。

字符编码(Character Encoding)是把字符集中的字符编码为指定集合中的某个对象,以便信息在计算机中传输。在密码学中,加密其实就是在编码,解密其实就是在解码。

        Python常用的编码方式:

(1)ASCII码(美国信息交换标准代码)

(2)GBK 和 GB2312(中文编码)

(3)Unicode(全球统一编码)

(4)UTF-8(全球统一编码2)

       这写编码方式中,现代计算机主要使用的编码方式是UTF-8.

二、Python常用的加密方式

(1)对称加密(AES、3DES、DES)

(2)非对称加密(RSA、DES、ECDSA、Rabin(RSA的特例)、ELGamal)

(3)散列函数(MD5、SHA)

        今天我要讲的就是非对称加密中的RSA算法。

在Python中可以使用rsa库

三、实现过程 

1.安装依赖
pip install rsa
2.实现代码

生成公钥:

import rsa

f = rsa.newkeys(1024)  # 生成公钥

f = f.save_pkcs1()  # 保存为 .pem 格式
with open("public.pem", "wb") as x:  # 保存公钥
    x.write(f)

生成私钥:

import rsa

e = rsa.newkeys(1024)  # 生成私钥

e = e.save_pkcs1()  # 保存为 .pem 格式
with open("private.pem", "wb") as x:  # 保存私钥
    x.write(e)

RSA加密:

import rsa
import base64

password = 'password'#加密内容
print('password:%s' % password)

y = base64.b64encode(password.encode())
print('y:%s' % y)

with open("public.pem", "rb") as x:
    f = x.read()
    f = rsa.PublicKey.load_pkcs1(f)  #公钥

with open("private.pem", "rb") as x:
    e = x.read()
    e = rsa.PrivateKey.load_pkcs1(e)  #私钥

cipher_text = rsa.encrypt(y, f)  # 使用公钥加密
print('cipher_text:%s' % cipher_text)

msg = base64.b64encode(cipher_text).decode()
print('msg:%s' % msg)

crypto = base64.b64decode(msg)
print('crypto:%s' % crypto)

text = rsa.decrypt(crypto, e).decode()  # 使用私钥解密
print('text:%s' % text)

password = base64.b64decode(text).decode()
print('password:%s' % password)

四、代码汇总 

import rsa
import base64

public,private = rsa.newkeys(2048)  # 生成公钥、私钥

public = public.save_pkcs1()  # 保存为 .pem 格式
with open("public.pem", "wb") as x:  # 保存公钥
    x.write(public)
private = private.save_pkcs1()  # 保存为 .pem 格式
with open("private.pem", "wb") as x:  # 保存私钥
    x.write(private)


password = 'password'#加密内容
print('password:%s' % password)

y = base64.b64encode(password.encode())
print('y:%s' % y)

with open("public.pem", "rb") as x:
    public = x.read()
    public = rsa.PublicKey.load_pkcs1(public)  #公钥

with open("private.pem", "rb") as x:
    private = x.read()
    private = rsa.PrivateKey.load_pkcs1(private)  #私钥

cipher_text = rsa.encrypt(y, public)  # 使用公钥加密
print('cipher_text:%s' % cipher_text)

msg = base64.b64encode(cipher_text).decode()
print('msg:%s' % msg)

crypto = base64.b64decode(msg)
print('crypto:%s' % crypto)

text = rsa.decrypt(crypto, private).decode()  # 使用私钥解密
print('text:%s' % text)

password = base64.b64decode(text).decode()
print('password:%s' % password)

五、运行结果 

password:password
y:b'cGFzc3dvcmQ='
cipher_text:b'W^\x04~#\x987\xf6\x91\xa9\xbbP4\xfa\xb7Q\x84+(\'\x1e\xa8\xcdl\x06\x87]\xd0\x99\xc7T\x8ff\x14\\,\xb6q/\x8c\xb0\x05\x9d#]\xfc\xd4c-\xfd\xf4\xcbI\x0cr\xa3L!])\xc8\xd0\xe1,x\x1f\x9bh?\xdfa$\x19\x07\xaaYH6\xa6\x07\x86jg`~\xc4\x1e\xacYa,$\xb4\x9f\x80\x00\xdeHtQT\x05\xa1\x92\xf1\xc9\x9a\x076\xde\x8e~\xc2\xb8\xc3\xfc0\xf5\x04\x0e\x82\xe3\xee\xa1\x07PA\xd95\xae\xca)\xca\xbfV\xe1(\xebY\xafQ\x965T\xe1\x10"t)E:\xc3\xc4:\xa6}\x91\xa9\xbb\xbeL\r/0\x9aK\x9f\x13\x15\xa8\xda\xb0Ci\xc7\xf3\x11J\xec".\xc7\x8eT\x88\x0c\x08\\j!{\x83\xdf\x92z\x9b\r\x14\xd7\xabK\xc2\x12\xe9\x7f\xa1Z\xacH\xe5\xa2\xf3\x10\x8a\xfc\x03\xc1<C\x93&\xb3u(y\x17\\b\x91jC\x91\x03\xaf\xecV\xabM\x86}\x95\x81\xbeI[\xc4\xa2D\x17p\xd1i\x95U\x97\x1a'
msg:V14EfiOYN/aRqbtQNPq3UYQrKCceqM1sBodd0JnHVI9mFFwstnEvjLAFnSNd/NRjLf30y0kMcqNMIV0pyNDhLHgfm2g/32EkGQeqWUg2pgeGamdgfsQerFlhLCS0n4AA3kh0UVQFoZLxyZoHNt6OfsK4w/ww9QQOguPuoQdQQdk1rsopyr9W4SjrWa9RljVU4RAidClFOsPEOqZ9kam7vkwNLzCaS58TFajasENpx/MRSuwiLseOVIgMCFxqIXuD35J6mw0U16tLwhLpf6FarEjlovMQivwDwTxDkyazdSh5F1xikWpDkQOv7FarTYZ9lYG+SVvEokQXcNFplVWXGg==
crypto:b'W^\x04~#\x987\xf6\x91\xa9\xbbP4\xfa\xb7Q\x84+(\'\x1e\xa8\xcdl\x06\x87]\xd0\x99\xc7T\x8ff\x14\\,\xb6q/\x8c\xb0\x05\x9d#]\xfc\xd4c-\xfd\xf4\xcbI\x0cr\xa3L!])\xc8\xd0\xe1,x\x1f\x9bh?\xdfa$\x19\x07\xaaYH6\xa6\x07\x86jg`~\xc4\x1e\xacYa,$\xb4\x9f\x80\x00\xdeHtQT\x05\xa1\x92\xf1\xc9\x9a\x076\xde\x8e~\xc2\xb8\xc3\xfc0\xf5\x04\x0e\x82\xe3\xee\xa1\x07PA\xd95\xae\xca)\xca\xbfV\xe1(\xebY\xafQ\x965T\xe1\x10"t)E:\xc3\xc4:\xa6}\x91\xa9\xbb\xbeL\r/0\x9aK\x9f\x13\x15\xa8\xda\xb0Ci\xc7\xf3\x11J\xec".\xc7\x8eT\x88\x0c\x08\\j!{\x83\xdf\x92z\x9b\r\x14\xd7\xabK\xc2\x12\xe9\x7f\xa1Z\xacH\xe5\xa2\xf3\x10\x8a\xfc\x03\xc1<C\x93&\xb3u(y\x17\\b\x91jC\x91\x03\xaf\xecV\xabM\x86}\x95\x81\xbeI[\xc4\xa2D\x17p\xd1i\x95U\x97\x1a'
text:cGFzc3dvcmQ=
password:password

RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年发明。在Python中,我们可以使用内置库`cryptography`或第三方库`pycryptodome`来实现RSA公钥加密。 **RSA原理概述:** 1. **密钥生成**:RSA算法基于大数分解难题,它包含一对密钥,即公钥和私钥。公钥用于加密,而私钥用于解密。 2. **加密过程**:发送方使用接收方的公钥对明文进行加密,接收方无法用公钥直接解密。 3. **解密过程**:只有拥有私钥的人才能解密使用公钥加密信息。 **Python实现示例(使用cryptography库):** ```python from cryptography.hazmat.primitives.asymmetric import rsa from cryptography.hazmat.primitives import serialization, hashes from cryptography.hazmat.primitives.asymmetric import padding # 生成RSA密钥对 key_pair = rsa.generate_private_key(public_exponent=65537, key_size=2048) # 公钥和私钥 public_key = key_pair.public_key() private_key = key_pair # 加密数据 message = b'Secret message' ciphertext = public_key.encrypt( message, padding.OAEP( mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None ) ) # 解密数据 plaintext = private_key.decrypt(ciphertext) ``` **相关问题--:** 1. RSA算法的安全基础是什么? 2. 如何确保使用Python RSA加密的数据只可由拥有正确私钥的人解密? 3. `cryptography`库中的`OAEP`和`MGF1`分别代表什么? 4. 如果丢失了RSA的私钥,如何安全地生成新的私钥对?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值