首页 > 编程语言 >Python实现RSA加密算法,让你的信息更加安全

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

时间:2024-07-24 16:54:19浏览次数:15  
标签:Python text RSA private rsa pem print password 加密算法

一、什么是编码

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

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

字符编码(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

标签:Python,text,RSA,private,rsa,pem,print,password,加密算法
From: https://blog.csdn.net/gaoyuchenw/article/details/140664068

相关文章

  • Python 中的工作队列 - 我错过了什么吗?
    这可能会被标记为重复或可能不相关。但我实际上相信这个问题对我和未来缺乏经验的Python开发人员都很重要。由于GIL,用于CPU密集型任务的本地工作队列的概念在Python中至关重要。这方面SE上有明显的答案。使用子进程的方法来绕过缺乏真正的CPU有限并行性的问题。在Pyth......
  • Python ctypes OSError:[WinError 1114]动态链接库(DLL)初始化例程失败
    我试图使用Python中的ctypes库调用C++函数:test.pyfromctypesimport*fromrandomimportrandinttester=cdll.LoadLibrary('./test.dll')print(tester.test(randint(1,100)))test.cpp#include<vector>intcppTest(intnum){std:......
  • Python 的分布式锁管理器
    我有一堆具有多个实例的服务器,这些实例访问的资源对每秒的请求有硬性限制。我需要一种机制来锁定所有正在运行的服务器和实例对此资源的访问。有我在github上找到的一个restful分布式锁管理器:https://github.com/thefab/restful-distributed-lock-manager不幸......
  • 如何在Python中提示self变量的类型
    通常不需要关心Python类成员函数中的self变量,但我正在实现一个装饰器,看起来像defextractor(depends:List[Text]=None,provides:List[Text]=None)->Callable[[ExtractorFunction],Extracto......
  • 将 Python 类型提示限制为元组中的值
    我的方法之一采用status中使用的filter()参数。此参数与定义如下的模型字段相关:STATUS_CHOICES=((1,_("draft")),(2,_("private")),(3,_("published")),)classMyModel(Model):status=models.PositiveSmallIntegerFi......
  • 在python中查找区间数据的中位数
    我正在探索不同的python库,我想知道如何找到分组数据集的近似中值。这里有一个表格供参考。年龄频率1-1012310-203502......
  • 比较Python中的字符串统一特殊字符
    也许我可以使用更好的英语,但我想要的是忽略单词中的重音(和类似的),所以:renè、rené、rene'和rene应该是相同的,所以应该mañana和manana或even-distribuited和evendistribuited,可能还有sho......
  • 如何使用 Python 脚本从客户账单电子邮件中获取订单 ID - WooCommerce API
    我想创建一个python脚本,返回只知道客户的账单电子邮件的订单。我尝试这样做,但返回所有最近的订单:fromwoocommerceimportAPIwcapi=API(url="https://siteexample.com",consumer_key="ck_xxx",consumer_secret="cs_xxx",version="wc/v3")......
  • python基础理论小总结
    1.python语言的特性Python是一门解释型语言,简单清晰,开源免费,跨平台,有大量第三方库辅助开发,支持面向对象与自动垃圾回收,方便与其他编程语言相互调用。Python在数据采集、人工智能、WEB后台开发、自动化运维、测试等方向应用广泛。2.解释型语言和编译型语言的区别执行方式不......
  • python编码规范
    本篇讲的是代码格式化的问题,解决格式化的方法在最下方,不想看内容的,滑到最下方就好了。一、变量的命名规则1.组成:字母、数字、下划线2.不可以以数字开头3.不建议使用下划线开头4.命名需见名知意5.不要与关键字重名。如何查找所有关键字?importkeywordprint(keyword.k......