一:程序主逻辑

#codeing:UTF-8
#__author__:Administrator
#date:2018/4/27/027 0:23
import time
import os
import sys
base_dir = os.path.dirname((__file__))  #路径的加入
# print(base_dir)
sys.path.append(base_dir)#路径的加入
import wienerdef encode(N,e):file_name = input("请输入数据保存的文件名:>如:RSA加密1.txt>>")file = open(file_name, "w", encoding="utf-8")need_code_data = input("请输入需要加密的数据>>>").strip()need_code_data = int(need_code_data)print("需要加密的数据为:",need_code_data)# need_code_data_list = []# encode_data_list = []# col_num = int(len(need_code_data)/8) +1# for i in range(col_num):#     if i < col_num -1:#         deal_data = need_code_data[i*8:i*8+8]#     else:#         deal_data = need_code_data[i*8:]#     # print(int(deal_data))#     need_code_data_list.append(int(deal_data))# print(need_code_data_list)# print(bin(e))e_of_b = str(bin(e))[2:]# print(e_of_b)save_data = 1for x in e_of_b:g = need_code_dataif x == "1":save_data = (save_data*g)%Nelse:save_data = (save_data ** 2)%N# print(save_data)
    file.write(str(save_data))file.close()return save_data# for i in need_code_data_list:   #分组计算#     save_data = 1#pow(i,e)#     # cal_num = 2#     print(i,type(i))#     for x in e_of_b:#         if x == "1":#             save_data = (save_data*i)%N#         else:#             save_data = (save_data ** 2) % N#     print(save_data)#     encode_data_list.append(save_data)# print(encode_data_list)
def calculate_data(N,e):file_name = input("请输入数据保存的文件名:>如:连分数展开1.txt>>")file = open(file_name,"w",encoding="utf-8")# N = 28562942440499# e = 7502876735617a_list = wiener.calculate_a(e / N)# print(a_list)A_list = wiener.calcul_A(a_list, len(a_list))# print(A_list)for i in range(len(a_list)):mas = "a"+str(i)+"="+str(a_list[i])+"    A"+str(i)+"="+str(A_list[i])+"="+str(A_list[i][0])+"/"+str(A_list[i][1])+"\n"file.write(mas)file.close()
def mi_key_hack(N,e):file_name = input("请输入数据保存的文件名:>如:RSA攻击1.txt>>")file = open(file_name, "w", encoding="utf-8")a_list = wiener.calculate_a(e / N)A_list = wiener.calcul_A(a_list, len(a_list))d_use_data = wiener.check_N(e, N, A_list)finall_d_data = wiener.finally_check_d(d_use_data, e, N)for i in range(len(finall_d_data)):mas = "d=" + str(finall_d_data[i][0]) + " p=" + str(finall_d_data[i][1]) + " q=" + str(finall_d_data[i][2]) + "PHI=" + str(finall_d_data[i][3]) + "\n"file.write(mas)file.close()# print(finall_d_data)
def write_N_e(N,e):print("之前的N,e分别为:>>>>",N,e)input_data = input("请重新输入N、e,用空格隔开>>>>").split(" ")# print(input_data)N,e = int(input_data[0]),int(input_data[1])# print(N,e)return (N,e)
def exit_fun(N,e):exit()
def main(N,e):choice_dict = {1: encode, 2: calculate_data, 3: mi_key_hack ,4:write_N_e,5:exit_fun}while True:masg = """=====功能菜单:===============================           1:数据加密              ======           2:连分式展开            ======           3:密钥的攻击            ======           4:重置N,e               ======           5:退出函数=========================================="""print(masg)choice = int(input("请输入你选择的功能号:>>>>"))N_and_e = choice_dict[choice](N,e)if choice == 4:N,e = N_and_e[0],N_and_e[1]print("更改后的N、e为:",N,e)print("执行结束,即将返回....")time.sleep(1)
if __name__ == "__main__":N= 28562942440499e = 7502876735617print("初始公钥为N,e :",N,e)print("提示:进入菜单后可以更改公钥")print("提示:进入菜单......")# N=160523347  #公钥1# e=60728973# N=4254607303    #公钥2# e=3231248239# time.sleep(2)main(N,e)

连分数攻击主程序  提示1024bit的攻击未成功

#codeing:UTF-8
#__author__:Administrator
#date:2018/4/26/026 10:06
def calculate_a(calculate_num):list_a = []deal_num = calculate_numfor i in range(300):moment_a = deal_num % 1append_a = deal_num - moment_alist_a.append(append_a)# print(deal_num,append_a)deal_num = 1 /(deal_num-append_a)return list_adef calcul_A(list_a,length_a):list_A = []for i in range(length_a):deal_list = list_a[:i+1]deal_num =len(deal_list)flag = Truewhile deal_num > 1:if flag == True:p = deal_list[deal_num- 1] * deal_list[deal_num-2] + 1q = deal_list[deal_num- 1]append_tuple_pq = (int(p),int(q))# print(append_tuple_pq)deal_num -=2flag = Falseelse:new_q = append_tuple_pq[0]  # p 3new_p = append_tuple_pq[1]  # q 2p = deal_list[deal_num - 1] * new_q + new_pq = new_qappend_tuple_pq = (int(p),int(q))# print(append_tuple_pq)deal_num -= 1else:if flag == True and deal_num ==1 :q = deal_list[deal_num-1]p = 1append_tuple_pq = (int(p),int(q))# print(append_tuple_pq)else :new_q = append_tuple_pq[0]  # p 3new_p = append_tuple_pq[1]  # q 2p = deal_list[deal_num - 1] * new_q +new_pq = new_qappend_tuple_pq = (int(p), int(q))list_A.append(append_tuple_pq)return list_Adef check_N(e,N,list_A):  #过滤可用的k/duseful_data = []for i in list_A:k = int(i[0])d = int(i[1])if (e*d-1)%k==0 and d !=1 and d<N and d!=0:useful_data.append(i)return useful_datadef finally_check_d(d_list,e,N):result_data = []for i in d_list:k = int(i[0])d = int(i[1])FIN = int((e * i[1] - 1) / i[0])# print(F_and_N)p_and_q = N - FIN +1# print(p_and_q)for x in range(int(p_and_q/2),p_and_q):if x * (p_and_q - x) == N:result_data.append((d ,x,p_and_q-x,FIN))return result_data# N = 10088821
# e=3905745if __name__ == "__main__":# N=160523347  #公钥1# e=60728973# N=4254607303    #公钥2# e=3231248239
N = 28562942440499   #公钥3e = 7502876735617# 公钥4#  N=67413492557336846539848944654588427510674136710336496477536280434149753427064025563334904527604187742536389581868217454855192496861370028546941279678384891963660931858219195511402645528868253750722549516549902488662436218392592253709764220778391139803580637991034641103694298696184202191875835150171491066691#  e=55668825058376388576113884040385292667510043490011858212473465931416310111625430534836493367797004997544370288958836993585093703688885638705916296545617964378468562419875481220082488169256684043454124045215432169627429196661617858371465847627303530906317588472913047600188255485102837752107180962349209908663# # 相关数据# [(27763604.0, 33620999.0)]# PHI 67413492557336846539848944654588427510674136710336496477536280434149753427062861174765678995902826007920042704951772509122046163305406233434817786489802796641662960034324556978613332350467285294794906107031877163314306505878423580552717416452810213936256441506719861839980217226929893614313258623609084051456a_list = calculate_a(e / N)# print(a_list)A_list = calcul_A(a_list, len(a_list))print(A_list)print(len(A_list))d_use_data = check_N(e, N, A_list)print(d_use_data)finall_d_data = finally_check_d(d_use_data, e, N)print(finall_d_data)

转载于:https://www.cnblogs.com/duke77--null/p/9026458.html

RSA连分数攻击实现相关推荐

  1. c语言用连分数求根号2,RSA的连分数攻击C语言实现

    RSA的连分数攻击C语言实现 R S A RSA RSA公钥加密所基于的困难问题是大整数的质因数分解,在本文中我基于连分数分解合数的思想,对RSA的连分数攻击进行了基本的C语言模拟,我尝试利用连分数对 ...

  2. 关于RSA中间人攻击

    一 点睛 中间人攻击的方法不能破译RSA,但却是一种针对机密性的有效攻击. 所谓中间人攻击,就是主动攻击者混入发送者和接收者中间,对发送者伪装成接收者,对接收者伪装成发送者的攻击方式. 二 攻击过程 ...

  3. RSA常见攻击方式(西电网信密码学大作业)

    题目:RSA大礼包 摘要: 实验要求: 使用截获的加密数据,根据RSA算法的非合规使用,参数选取不当等,破译出相关明文和参数,其中参数主要为p.q以及私钥d. 实验目的: 通过对已截获密文的破译,学习 ...

  4. RSA算法详解及攻击原理分析-附攻击范例

    文章目录 RSA算法 1.算法背景 1.1 公钥密码 1.2 公钥体制数学基础 1.3 公钥通信的流程 2.RSA算法数学基础 2.1 RSA相关的数论基础 2.2 欧拉定理及推广 3. RSA算法构 ...

  5. 密码学实验-RSA算法的几种攻击方法的实现

    目录 一.实验要求 (一) RSA算法攻击方法分析相关要求 二.代码简述 (一)费马方法 1.原理: 2.代码分析 (二)pollard rho 方法 1.原理 2.代码分析: (二)pollard ...

  6. RSA基本原理及常见攻击方法

    1前言 密码学为数据的处理.存储和通信过程提供附加的安全级别.近年来,数学家和计算机科学家开发了一系列日益复杂的算法,这些算法被设计用于确保机密性.完整性.身份认证和不可否认性.在密码学家花费大量时间 ...

  7. CTF 中RSA的常见解析

    0x01 前言 这里就不讨论数论的基础了,进行RSA的题目解答,至少要懂得基本的数论知识的,如果不了解数论的基本知识的话,网上相关内容还是挺多的. RSA基于一个简单的数论事实,两个大素数相乘十分容易 ...

  8. RSA--维纳攻击--代码和题目分析

    文章目录 维纳攻击原理: 维纳攻击脚本 [羊城杯 2020]RRRRRRRSA 1 题目描述: 题目分析: 收获与体会: 维纳攻击原理: 两位大佬讲得非常清楚(搬运工就是我):https://zhua ...

  9. 八大典型APT攻击过程详解

    八大典型APT攻击过程详解 2013-08-27 17:55 启明星辰 yepeng 51CTO.com 字号:T | T APT攻击是近几年来出现的一种高级攻击,具有难检测.持续时间长和攻击目标明确 ...

最新文章

  1. RabbitMQ 入门系列(9)— Python 的 pika 库常用函数及参数说明
  2. 使用JFreeChart绘制散点图
  3. VMware vSphere 6简单部署---VCSA( vCenter Server Appliance)部署
  4. mysql innodb表损坏_MySQL数据库INNODB表损坏修复处理过程分享
  5. 前端学习(1937)vue之电商管理系统电商系统之渲染分配角色的对话框并请求数据
  6. php fatal error 500,PHP在Linux下出现HTTP ERROR 500解决方法
  7. Java CAS无锁技术深度解析
  8. Makefile变量
  9. RHEL5远程部署操作指导手册
  10. 河南计算机基础知识会考,2011河南事业单位备考计算机基础知识试题(含答案 )...
  11. 机器学习,深度学习的资料和工具库大全
  12. 软件项目设计文档分类
  13. iphone 投android电视,手机投屏到电视上的2种方法,看完才知道原来这么简单
  14. 1.3_VMare 16 虚拟机安装配置 CentOS-7-x86_64-DVD-2009+GUI+原生 Java 1.8+ibus+VMware Tools
  15. 斯坦福大学终身教授张首晟:区块链最核心的理念,必然是「 In Math We Trust 」
  16. android studio项目改成android.mk编译APP闪退java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader
  17. kubebuilder自定义资源
  18. 学编程的 3 个正经建议,学弟学妹们记得收藏呀,这波赚大发了!
  19. execve 执行遇到的问题-已解决
  20. DAY3:Linux系统常用指令

热门文章

  1. IIC 关于时钟拉伸问题 clock stretch
  2. 算法工程师是不是一个「越老越吃香」的岗位?
  3. 功率放大器的参数和应用场景是什么
  4. linux中int类型,int数据类型占几个字节?
  5. [APIO2016]划艇
  6. windows制作安装包的工具
  7. 关于检测数字人脸操纵
  8. 什么是外汇量化交易稳定盈利的核心?
  9. 转行学什么技术最赚钱?选择Python,你绝对不会后悔
  10. RS485通讯---Modbus数据链路层与应用层(二)