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程序的更多相关文章

  1. 模拟退火算法Python编程(2)约束条件的处理

    1.最优化与线性规划 最优化问题的三要素是决策变量.目标函数和约束条件. 线性规划(Linear programming),是研究线性约束条件下线性目标函数的极值问题的优化方法,常用于解决利用现有的资 ...

  2. 模拟退火算法Python编程(3)整数规划问题

    1.整数规划问题 整数规划问题在工业.经济.国防.医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题(Discrete Optimization). 线性规划问题的 ...

  3. Python rsa公私钥生成 rsa公钥加解密(分段加解密)-私钥加签验签实战

    一般现在的SAAS服务提供现在的sdk或api对接服务都涉及到一个身份验证和数据加密的问题.一般现在普遍的做法就是配置使用非对称加密的方式来解决这个问题,你持有SAAS公司的公钥,SAAS公司持有你的 ...

  4. rsa字符串格式公钥转换python rsa库可识别的公钥形式

    在爬虫分析的时候,经常在网页上看到如下格式的rsa公钥: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC7kw8r6tq43pwApYvkJ5laljaN9BZb21 ...

  5. 基于python的RSA解密算法

    摘要 网上有很多关于RSA的解密脚本,欧拉函数.欧几里得函数什么的,对于一个大专生的我来说,一窍不通,至此经历了三天三夜,我翻阅了RSA的加密原理,以及其底层算法,专研出了一套我自己的解密算法,尚有不 ...

  6. 【密码学】RSA公钥密码体制

    RSA公钥密码体制是美国麻省理工学院(MIT)的三位科学家Rivest.Shamir.Adleman于1978年提出的,简称RSA公钥秘密系统.实际上,RSA稍后于MH背包公钥密码实用系统,但它的影响 ...

  7. [区块链] 密码学——椭圆曲线密码算法(ECC)

    今天在学椭圆曲线密码(Elliptic Curve Cryptography,ECC)算法,自己手里缺少介绍该算法的专业书籍,故在网上查了很多博文与书籍,但是大多数博客写的真的是...你懂的...真不 ...

  8. 使用RSA加密在Python中逆向shell

    i春秋翻译小组-Neo(李皓伟) 使用RSA加密在Python中逆向shell 这是一个关于使用RSA加密编程逆向shell的python教程. 我想提一下,这篇文章更多的是关于理解shell中涉及的 ...

  9. RSA公钥文件解密密文的原理分析

    前言 最近在学习RSA加解密过程中遇到一个这样的难题:假设已知publickey公钥文件和加密后的密文flag,如何对其密文进行解密,转换成明文~~ 分析 对于rsa算法的公钥与私钥的产生,我们可以了 ...

  10. 你竟然在公钥中下毒!——如何在RSA公钥中添加后门

    原文:http://www.hackdig.com/?01/hack-17893.htm 分享到: 当我知道它是如何运行时,我惊得下巴都掉了.这是一个非常简单的手法,但这篇文章会颠覆你之前对RSA的看 ...

随机推荐

  1. #BFS,二进制#CF1776J Italian Data Centers

    洛谷题面 CF1776J 分析 将原图的点所拆开的点按二进制编号,那么同一个点之间连边当且仅当恰好一个二进制位不同, 不同点之间连边颜色相同则其二进制相同,否则完全相反. 可以钦定起点就是 \((x, ...

  2. #矩阵树定理,高斯消元#洛谷 4111 [HEOI2015]小 Z 的房间

    题目 分析 题目要求生成树个数,求出基尔霍夫矩阵后高斯消元, 但是这里模数不是质数,所以要辗转相除法 代码 #include <cstdio> #include <cctype> ...

  3. 活动报名|OpenHarmony 战“码”先锋,PR 征集令

    OpenAtom OpenHarmony(以下简称"OpenHarmony")工作委员会首度发起「OpenHarmony 开源贡献者计划」,旨在鼓励开发者参与 OpenHarmon ...

  4. OpenHarmony标准系统开机时长优化

    简介 万物互联时代,产品性能至关重要,而系统启动时间是系统性能的重要组成部分,因为用户必须等待系统启动完成后才能使用设备.对于经常需要进行冷启动的汽车等设备而言,较短的启动时间至关重要(没有人喜欢在等 ...

  5. 掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验

    原生智能是HarmonyOS NEXT的核心亮点之一,依托HarmonyOS SDK丰富全面的开放能力,开发者只需通过几行代码,即可快速实现AI功能.新浪新闻作为鸿蒙原生应用开发的先行者之一,从有声资 ...

  6. Java面试题总结:基础及语法篇169道

    下载链接:https://gitee.com/ItBoShao/wechat_applet/blob/master/Java面试题总结:基础及语法篇169道.pdf

  7. docker 应用篇————portainer[九]

    前言 简单介绍一下portainer. 正文 运行一下. docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/va ...

  8. cv2在图像上画不同比例的锚框

    ''' cv2在图像上画不同比例的锚框 ''' import cv2 import math # 画宽高比1:1的锚框 def display_11_anchor(img,anchor_11_left ...

  9. ESXI 6.5 零基础从安装到批量生成/管理虚拟机简易教程

    制造U盘安装盘 1 先提前下载好,ESXI 6.5 ISO文件. 2 下载制作U盘安装工具,RUFUS. Rufus非常小巧的绿色EXE文件,默认配置选中ISO文件就可以,点击开始,就自动制作,非常方 ...

  10. 手把手教你PolarDB-X中的表设计——用户表

    简介: 本系列旨在描述一个具体的业务场景,给出建表的例子,帮助大家更好的使用PolarDB-X.本期的主题是:用户表. 本系列旨在描述一个具体的业务场景,给出建表的例子,帮助大家更好的使用PolarD ...