密码学—RSA公钥算法Python程序
RSA流程
- 选取两个素数p,q,保密p,q
- 计算出n = p×q ,公开n
- 计算φ(n)=(p-1)(q-1) ,保密φ(n)
- 选择一个数e ,e满足:e < φ(n) , gcd(e,φ(n)) = 1,公开e
- 计算出d, d×e=1 mod φ(n),保密d
- 加密m:c = me mod n
- 解密c :m = cd mod n
细节
在RSA中加密加密并不难,主要是在现实生活中加密的文本的一般对应在转为ASCII的时候对应的数字会特别大,所以假如说我们选择的p×q=n的n不够大,也就是说明文对应的数字大于n这大小的时候就会导致加密失败。
一定要注意模数范围,如果你要加密的数字超过你所在的模数范围就会加密失败,你的要加密的数字必须在你选取的模数范围内,其实这个模数也就是明文空间。(密钥空间: φ(n))。
怎么看空间:就是看你计算式子的模数,好比密钥d,计算的式子是模 φ(n),那密钥空间就是 φ(n)。
明文加解密都是模n,那空间就是你选取好的两个素数相乘后的n大小
知识点
求欧拉函数程序
#求欧拉数
def eulrFun(num):
lis = []
if ToolCode.isPrime(num):
return num - 1;
ToolCode.standard_Decpo2(num, lis)
for i in range(0, len(lis)):
if lis[i] != 0:
num *= (1 - 1 / (i + 2))
return int(num) def isPrime(num):
'''
判断是否为素数,返回bool值
:param num:
:return: True/False
'''
for i in range(2, int(math.sqrt(num) + 1)):
if num % i == 0:
return False
return True
def standard_Decpo2(num, lis):
result = num
power = 0
sum = 1
for i in range(2, int(num + 1)):
while True:
if num % i == 0:
num /= i
power += 1
else:
break
lis.append(power)
sum *= math.pow(i, power)
if sum == result:
return lis
power = 0解一次同余方程,也就是求d
#求出d
def return_D(e, eulr_n):
num = ToolCode.oneCongru(e, 1, eulr_n)
if num is not None:
return num
else:
return None
def oneCongru(a, b, m):
if math.gcd(a, m) == 1 or b % math.gcd(a, m) == 0:
for i in range(0, m):
if (a * i) % m == b:
return i
else:
print(a, "无解")
return None
密码学—RSA公钥算法Python程序的更多相关文章
- 模拟退火算法Python编程(2)约束条件的处理
1.最优化与线性规划 最优化问题的三要素是决策变量.目标函数和约束条件. 线性规划(Linear programming),是研究线性约束条件下线性目标函数的极值问题的优化方法,常用于解决利用现有的资 ...
- 模拟退火算法Python编程(3)整数规划问题
1.整数规划问题 整数规划问题在工业.经济.国防.医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题(Discrete Optimization). 线性规划问题的 ...
- Python rsa公私钥生成 rsa公钥加解密(分段加解密)-私钥加签验签实战
一般现在的SAAS服务提供现在的sdk或api对接服务都涉及到一个身份验证和数据加密的问题.一般现在普遍的做法就是配置使用非对称加密的方式来解决这个问题,你持有SAAS公司的公钥,SAAS公司持有你的 ...
- rsa字符串格式公钥转换python rsa库可识别的公钥形式
在爬虫分析的时候,经常在网页上看到如下格式的rsa公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21 ...
- 基于python的RSA解密算法
摘要 网上有很多关于RSA的解密脚本,欧拉函数.欧几里得函数什么的,对于一个大专生的我来说,一窍不通,至此经历了三天三夜,我翻阅了RSA的加密原理,以及其底层算法,专研出了一套我自己的解密算法,尚有不 ...
- 【密码学】RSA公钥密码体制
RSA公钥密码体制是美国麻省理工学院(MIT)的三位科学家Rivest.Shamir.Adleman于1978年提出的,简称RSA公钥秘密系统.实际上,RSA稍后于MH背包公钥密码实用系统,但它的影响 ...
- [区块链] 密码学——椭圆曲线密码算法(ECC)
今天在学椭圆曲线密码(Elliptic Curve Cryptography,ECC)算法,自己手里缺少介绍该算法的专业书籍,故在网上查了很多博文与书籍,但是大多数博客写的真的是...你懂的...真不 ...
- 使用RSA加密在Python中逆向shell
i春秋翻译小组-Neo(李皓伟) 使用RSA加密在Python中逆向shell 这是一个关于使用RSA加密编程逆向shell的python教程. 我想提一下,这篇文章更多的是关于理解shell中涉及的 ...
- RSA公钥文件解密密文的原理分析
前言 最近在学习RSA加解密过程中遇到一个这样的难题:假设已知publickey公钥文件和加密后的密文flag,如何对其密文进行解密,转换成明文~~ 分析 对于rsa算法的公钥与私钥的产生,我们可以了 ...
- 你竟然在公钥中下毒!——如何在RSA公钥中添加后门
原文:http://www.hackdig.com/?01/hack-17893.htm 分享到: 当我知道它是如何运行时,我惊得下巴都掉了.这是一个非常简单的手法,但这篇文章会颠覆你之前对RSA的看 ...
随机推荐
- C语言简易万年历带注释
同学问的课后作业,顺便加了写注释. #include<stdio.h> /* * 注意 每周的第一天是星期天 */ int main() { int day_per_mo[12] = { ...
- C++判断操作系统位数
//判断当前系统是否为64位 BOOL Is64BitSystem() { #ifdef _WIN64 return true; #elif _WIN32 HMODULE hModule = Load ...
- SQL PRIMARY KEY 约束- 唯一标识表中记录的关键约束
SQL NOT NULL 约束 SQL NOT NULL 约束用于强制确保列不接受 NULL 值.这意味着该字段始终包含一个值,而不允许插入新记录或更新记录时不提供此字段的值. 在 CREATE TA ...
- 驾考宝典携手HMS Core统一扫码服务,构建复杂场景中的流畅扫码体验
"驾考宝典"是一款颇具人气的互联网综合驾照考试学习应用,通过强大的驾考功能,在手机移动端为学车学员提供从报名.学习到拿本的全方位驾考服务.作为一个专业的驾培平台,"驾考宝 ...
- HarmonyOS NEXT调优工具Smart Perf Host高效使用指南
在软件开发的过程中,很多开发者都经常会遇到一些性能问题,比如应用启动慢.点击滑动卡顿.应用后台被杀等,想要解决这些问题势必需要收集大量系统数据.而在收集数据的过程中,开发者则需要在各种工具和命令之 ...
- HarmonyOS应用窗口管理(Stage模型)
一. 窗口开发概述 窗口模块的定义 窗口模块用于在同一块物理屏幕上,提供多个应用界面显示.交互的机制. ● 对应用开发者而言,窗口模块提供了界面显示和交互能力. ● 对终端用户而言,窗口模块提供 ...
- HDC2021技术分论坛:还有人不知道鸿蒙智联设备认证咋搞?
作者:maxiansheng,华为鸿蒙智联认证测试专家 2021年5月18日,华为正式宣布原Work With HUAWEI HiLink和Powered by HarmonyOS品牌升级为Harmo ...
- identity4 系列————用户数据持久化篇[六]
前言 前面的例子已经将各种情形下的例子已经介绍了一遍,那么后面就是用户数据持久化该如何处理了. 正文 例子位置: https://github.com/IdentityServer/IdentityS ...
- 重新整理 .net core 实践篇—————应用分层[二十四]
前言 简单整理一下分层. 正文 应用程序分层,分为: 1.领域模型层 2.基础设施层 3.应用层 4.共享层 共享层 共享层一般包括下面几个类库. 有一个Core 的类库,比如说BLog.Core. ...
- PIL.Image, numpy, tensor, cv2 之间的互转,以及在cv2在图片上画各种形状的线
''' PIL.Image, numpy, tensor, cv2 之间的互转 ''' import cv2 import torch from PIL import Image import num ...