使用Python 模拟RSA 加密与解密
一、关于
RSA具体原理请移步其他文章,本文主要使用Python 来模拟RSA 算法的实现过程
二、简要分析
在RSA算法中,存在以下几个参数:
1、大素数p、q
2、n = p *q
3、Phi_n = (p-q) * (q-1)
4、E = 0x10001
5、计算得到数d, 使得 e *d % phi_n = 1
6、明文:a
7、密文:b
其中,公钥对(p, e)以及RSA加密算法对公众开放,私钥对(q, d)由加密者自己保留。RSA加密过程为:发送者使用公钥对明文加密得到密文,接收者使用私钥可以解密;RSA签名过程为:发送者使用私钥对明文进行加密(签名),接受者使用公钥可以成功解密,则证明发送者确实是私钥的拥有者。
RSA加密实验基本流程:
一、选取两个大素数p、q,并计算得到n、phi_n
二、选取常用的e = 0x10001,方便将幂运算优化为左移,加快运算速度
三、计算d,使用了扩展欧几里得算法
四、输入明文a,将明文转化为可以用于计算的数字形式
五、对a使用快速幂取模,得到密文b,以16进制显示
RSA解密流程:
六、对b使用快速幂取模,得到明文a,以字符形式显示
三、Python 代码
文件Main.py 为加密解密主程序,methods.py 文件内定义了一些被调用的函数
# RSA Generate By SOOWIN
# 2019/11/26
# import math
import os
from methods import exgcd,quick_algorithm,get_prime # p = get_prime(20)
# q = get_prime(10) p = 10001569
q = 10001567
print("p is : ",end='')
print(p)
print("q is : ",end='')
print(q)
n = p * q
print("n is : ",end='')
print(n)
phi_n = (p-1) * (q-1)
print("phi_n is : ",end='')
print(phi_n) e = 0x10001
d = 0
d = exgcd(e, phi_n)
if(d == 0):
print("Can't generate a proper number d to fit the requirement.")
os.system("pause")
if(d < 0 ):
d += phi_n
print("d is : "+ str(d)) mText = "Hpptus"
mHex = mText.encode().hex()
print("mHex is : ",end='')
print(mHex)
mInt = int(mHex,16)
print("mInt is : ",end='')
print(mInt) c = quick_algorithm(mInt, e, n)
print("c is : ",end='')
print(c)
print("The message to be encrypt: "+mText)
print("The encrypted message is: "+ str(bytes.fromhex(hex(c)[2:]))) decr = quick_algorithm(c, d, n) # print(bytes.fromhex(hex(decr)[2:])) decrHex = bytes.fromhex(hex(decr)[2:])
# print(decrHex)
print("The message recovered: "+ str(decrHex,encoding="utf-8"))
Main.py
import sys,random def exgcd(m, n, x = 0, y = 0):
if n == 0:
x = 1
y = 0
return (m,x,y)
a1 = b = 1
a = b1 = 0
c = m
d = n
q = int(c/d)
r = c%d
while r:
c = d
d = r
t = a1
a1 = a
a = t-q*a
t = b1
b1 = b
b = t-q*b
q = int(c/d)
r = c%d
x = a
y = b
return x def quick_algorithm(a,b,c):
a=a%c
ans=1
while b!=0:
if b&1:
ans=(ans*a)%c
b>>=1
a=(a*a)%c
return ans
methods.py
使用Python 模拟RSA 加密与解密的更多相关文章
- python RSA加密、解密、签名
python RSA加密.解密.签名 python中用于RSA加解密的库有好久个,本文主要讲解rsa.M2Crypto.Crypto这三个库对于RSA加密.解密.签名.验签的知识点. 知识基础 加密是 ...
- python下RSA加密解密以及跨平台问题
Reference: http://www.cnblogs.com/luchanghong/archive/2012/07/18/2596886.html 项目合作需要,和其他网站通信,消息内容采用 ...
- Python的RSA加密和PBE加密
最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现. 在网上搜了一下,python的RSA加密这块写的还是比较多的,但是P ...
- 通过ios实现RSA加密和解密
在加密和解密中,我们需要了解的知识有什么事openssl:RSA加密算法的基本原理:如何通过openssl生成最后我们需要的der和p12文件. 废话不多说,直接写步骤: 第一步:openssl来生成 ...
- C#实现RSA加密和解密详解
原文:C#实现RSA加密和解密详解 RSA加密解密源码: Code highlighting produced by Actipro CodeHighlighter (freeware) http:/ ...
- ASP.NET Core RSA加密或解密
前言 这两天主要是公司同事用到了RSA加密,事后也看了下,以为很简单,最终利用RSACryptoServiceProvider来实现RSA加密,然后大致了解到RSACryptoServiceProvi ...
- C#实现RSA加密与解密、签名与认证(转)
一.RSA简介 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力 ...
- RSA加密和解密工具类
import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.*; i ...
- IOS, Android, Java Web Rest : RSA 加密和解密问题
IOS, Android, Java Web Rest : RSA 加密和解密问题 一对公钥私钥可以使用 OpenSSL创建, 通常 1024位长度够了. 注意: 1. 公钥私钥是BASE64编码的 ...
随机推荐
- STP的究极进化MSTP
MSTP多生成树协议 1.MSTP概述 2.MSTP相关配置命令 1.MSTP是一个公有生成树协议,在实际生产环境中得到了广泛的应用. PVST是思科私有的,它能让多实例,多VLAN可以进行负载均衡, ...
- 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高!
作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper. Mybatis Generator 是 ...
- 微服务从代码到k8s部署应有尽有系列(一)
从本篇文章开始,我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 实战项目地址:https://github.com/Mikaelemmmm/go-zer ...
- Solution -「洛谷 P5325」Min_25 筛
\(\mathcal{Description}\) Link. 对于积性函数 \(f(x)\),有 \(f(p^k)=p^k(p^k-1)~(p\in\mathbb P,k\in\mathbb ...
- C++特殊成员函数及其生成机制
在C++中,特殊成员函数指的是那些编译器在需要时会自动生成的成员函数.C++98中有四种特殊的成员函数,分别是默认构造函数.析构函数.拷贝构造函数和拷贝赋值运算符.而在C++11中,随着移动语义的引入 ...
- node + express本地搭建服务器,开启一个新的项目
1.安装node.地址:https://nodejs.org/zh-cn/download/ 2.新建一个文件夹test,进入到该文件夹下 a.按shift + 鼠标右键 ,选择在此处打开命令窗口( ...
- 【笔试必备】常见sql笔试题(30题)
sql是测试从业者必备的技能之一,基本上也是笔试必考内容. 所以,不要让sql拖了后腿,有些测友一遇到多表关联查询就犯晕,甚至连单表的执行顺序都没搞懂,下面简单介绍下,顺便给一些题供大家练习. 单表执 ...
- 完爆Excel!一个令人惊艳的数据展示工具,让你做图更轻松高效
数据展示应该是最常见的需求,我们经常利用数据做总结.用数据做分享.但是我们该如何更好地展示给我们需要展示的人,如何才能让我们的数据表达更加动人,这个值得让人思索. 说到数据表达,常用的数据展示方式无非 ...
- 库存数量管理方案一:基于SQL存储过程和MERGE(结合活字格案例)
库存更新是ERP系统的基本功能,一般包括以下动作:1.以库位编号和商品编号查询库存表,如果查询不到,则添加一行库存信息,如:(出入库)库位编号/(出入库)商品编号/(出入库)+或-数量2.以库位编号和 ...
- 当TIME_WAIT状态的TCP正常挥手,收到SYN后…
摘要:今天就来讨论下这个问题,在TCP正常挥手过程中,处于TIME_WAIT状态的连接,收到相同四元组的SYN后会发生什么? 本文分享自华为云社区<在TIME_WAIT状态的TCP连接,收到SY ...