密码学:古典密码.代替密码.仿射密码加密与解密 (广义欧几里得除法)

乘法密码和加法密码结合构成仿射密码,仿射密码函数为

                                                   f(ai)=bi=aj (i,j为下角标)

                                                   j=i*k1+k0 mod n   只对大写英文加密n为26

其中:要求  (k1,n)=1, 0<=k0<n,且不允许同时有k1=1和k0=0

代码解释:

在输入时密文为字符串,通过ASCII码进行加减A对应的ASCII码把英文字母对应为0~25

在找k1时用广义欧几里得除法得到1~25之内与26互素的数字放在p数组里面,用于密钥k1的选择

代码:

#include <stdio.h>
#include <string.h>
int Findp(int p[],int n)
{int top=0,flag=1;if (n%2)flag=0;     //如果n为偶数,偶数必然不和n互素{for (int i=1;i<n;)//利用广义欧几里得除法找1~n之内与n互素的数{int j1=n,j0=i,r=i;while(r!=0){do{j1-=j0;r=j1;}while(r>=j0);j1=j0;j0=r;}if(j1==1)p[top++]=i;if(!flag)i+=2;elsei++;}}return top;
}int main()
{char M[9999],C[9999];printf("请输入明文字符(大写英文字母,回车结束)\n");fgets(M,9999,stdin);int k1,k0,n=26;printf("请输入密钥k1 k0(中间空格分隔,k1=1和K0=0不能同时),");int p[26];int num=Findp(p,n);printf("k1可取值为");for (int i=0;i<num;i++)printf("%d ",p[i]);printf("\n");scanf("%d%d",&k1,&k0);printf("密文\n");int end=strlen(M),top=0;for (int i=0;i<end-1;i++){if(M[i]==' ')C[i]=' ';elseC[i]=((M[i]-65)*k1+k0)%n+65;}for (int i=0;i<end-1;i++){printf("%c",C[i]);}printf("\n解密\n");for (int i=0;i<end-1;i++){if (C[i]==' ')printf("%c",C[i]);else{int m=(C[i]-65-k0);//不能用char类型!!!!m超过100多变为负数//while(-25%25)不执行 所以不能小于0while(m%k1 || m<0) //需要先加26 什么时候模K1为0停止m+=26;//因为选K1时互素,所以这里即使后面也有模K1为0的 除k1后再mod26是一样的结果printf("%c",m/k1+65);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/444411.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WebGPU Unleashed】1.4 对不同的顶点设置不同颜色

一部2024新的WebGPU教程&#xff0c;作者Shi Yan。内容很好&#xff0c;翻译过来与大家共享&#xff0c;内容上会有改动&#xff0c;加上自己的理解。更多精彩内容尽在 dt.sim3d.cn &#xff0c;关注公众号【sky的数孪技术】&#xff0c;技术交流、源码下载请添加微信号&#x…

新电脑 Windows 系统初始配置

文章目录 前言1 前置配置2 安装软件2.1 通讯工具2.2 后端开发工具2.3 硬件开发工具2.4 前端开发工具2.4 其它工具 3 Windows 11 优化4 写在最后 前言 分区&#xff08;个人习惯&#xff09;&#xff1a;1TB SSD 分为 2 个分区&#xff0c;一个 256GB 分区为系统盘&#xff0c;剩…

计算机毕业设计 基于Python的豆果美食推荐系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

嵌入式数据结构中线性表的具体实现

大家好,今天主要给大家分享一下,如何使用数据结构中的线性表以及具体的实现。 第一:线性表的定义和表示方法 线性表的定义 – 线性表就是零个或多个相同数据元素的有限序列。 • 线性表的表示方法 – 线性表记为: L=(a0,∙∙∙∙∙∙∙∙ai-1aiai+1 ∙∙∙∙∙∙an-1) •…

软考《信息系统运行管理员》- 4.3 信息系统软件运维的过程

4.3 信息系统软件运维的过程 文章目录 4.3 信息系统软件运维的过程日常运维日常运维的内容日常运行例行测试维护例行测试流程的关键点例行维护流程的关键点 定期测试维护 缺陷诊断与修复信息系统软件缺陷的概念信息系统软件缺陷的分类信息系统软件缺陷诊断与修复流程缺陷诊断与…

Python编程:创意爱心表白代码集

在寻找一种特别的方式来表达你的爱意吗&#xff1f;使用Python编程&#xff0c;你可以创造出独一无二的爱心图案&#xff0c;为你的表白增添一份特别的浪漫。这里为你精选了六种不同风格的爱心表白代码&#xff0c;让你的创意和情感通过代码展现出来。 话不多说&#xff0c;咱…

pyQT生成界面,更改后不清除自定义代码的方法

基本原理就是作个子类继承生成的界面&#xff0c;在子类里写代码 工程结构 dialog_ui.py 界面子类 from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtGui import QStandardItemModel, QStandardItem, QColor, QFont from PyQt5.QtCore import Qt import Ui_dialog i…

【英语】5. 考研英语语法体系

文章目录 前言句字的成分一、常规句型简单句&#xff08;5 种&#xff09;1. 定义&#xff1a;句子中只包含 *一套主谓结构* 的句子。&#xff08;一个句子只能有一个谓语动词&#xff09;2. 分类 并列句&#xff08;由关联词组成&#xff09;&#xff08;3 种&#xff09;基本…

Kubernetes系列之一快速部署一套K8s集群(kubeadm方式)

最近本人在重温云原生相关的技术&#xff0c;说到云原生&#xff0c;必然绕不开Kubernetes&#xff0c;今天想跟大家聊的就是大名顶顶的Kubernetes。相信很多朋友在学习和使用Kubernetes的过程遇到各式各样不同的问题。我将从一个初学者的角度来给大家讲解一下Kubernete从安装、…

嵌入式面试——FreeRTOS篇(八) Tickless低功耗

本篇为&#xff1a;FreeRTOS Tickless 低功耗模式篇 一、低功耗模式简介 1、低功耗介绍 答&#xff1a; 很多应用场合对于功耗的要求很严格&#xff0c;比如可穿戴低功耗产品、物联网低功耗产品等&#xff1b;一般MCU都有相应的低功耗模式&#xff0c;裸机开发时可以使用MCU的…

6-基于TMS320C6678、FPGA XC5VSX95T的6U CPCI 8路光纤信号处理卡

1、板卡概述   本板卡由我公司自主研发&#xff0c;基于CPCI架构&#xff0c;符合CPCI2.0标准&#xff0c;采用两片TI DSP TMS320C6678芯片和Xilinx公司V5系列FPGA XC5VSX95T-1FF1136芯片。包含PCI接口、GMII的以太网接口、Nor Flash接口、8路SFP光 纤&#xff0c;4路RS232。…

Maven 高级之分模块设计与继承、聚合

在软件开发中&#xff0c;随着项目规模的扩大&#xff0c;代码量和复杂度不断增加&#xff0c;传统的一体化开发模式逐渐暴露出诸多问题。为了解决这些问题&#xff0c;模块化开发应运而生&#xff0c;而 Maven 正是模块化开发的利器&#xff0c;它提供的继承和聚合机制为构建和…

小米 MIX FOLD工程固件 更换字库修复分区 资源预览与刷写说明

小米 MIX FOLD机型代号 :cetus 该手机搭载骁龙888旗舰处理器 。对于一些因为字库问题损坏导致的故障,更换字库后要先刷写对应的工程底层修复固件。绑定cpu后在写入miui量产固件。 通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2💝💝💝-----此…

hadoop入门

1.1 hadoop是什么 Hadoop是一个由Apache基金会所开发的分布式系统基础架构&#xff0c;主要是解决海量数据的存储和海量数据的分析计算的问题。通常Hadoop指的是一个更为广泛的概念Hadoop生态圈 1.2 hadoop发展历程 Hadoop创始人Doug Cutting&#xff0c;为了实现与Google类…

手把手CNVD漏洞挖掘 + 资产收集

&#x1f497;想加SRC漏洞挖掘内部圈子&#xff0c;请联系我&#xff01; &#x1f497;技术文章交流&#xff0c;请联系我&#xff01; &#x1f497;需要职业技能大赛环境WP&#xff0c;请联系我&#xff01;&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&a…

C++设计模式——代理模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言代理模式的定义代理模式的具体实现 引言 我们经常听到代理服务器「代理服务器是一个中间服务器&#xff0c;能够接收客户端的请求&#xff0c;并代表客户端向服务器发起请求&#xff0c;然后将服…

【开源免费】基于SpringBoot+Vue.JS美发门店管理系统(JAVA毕业设计)

本文项目编号 T 069 &#xff0c;文末自助获取源码 \color{red}{T069&#xff0c;文末自助获取源码} T069&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 美…

被AI坑的一天—CentOS7导入阿里云YUM源报错的 GPG密钥提示404

过于相信人工智能 配置YUM源根据AI的说法换阿里云的YUM源验证AI配置结果解决问题 配置YUM源 由于电脑受限制 , 不能访问境外网站,所以用不了centos自带的源 ,是报404的 根据AI的说法换阿里云的YUM源 编辑 /etc/yum.repos.d/CentOS-Base.repo ,更换为 配置完成后sudo yum …

【多线程】多线程(11):ABA问题,JUC的常见类

【ABA问题】 线程改变了一个数值&#xff0c;但又修改回去了&#xff0c;看上去跟没变一样&#xff0c;但实际上已经有改过了的痕迹&#xff0c;可能引发一些bug CAS中存在ABA问题&#xff0c;但大部分情况下它不会带来bug 【JUC的常见类】 JUC指的是java.util.concurrent这…

【华为HCIP实战课程十】OSPF网络DR和BDR实战讲解,网络工程师

一、DR与BDR的基础介绍 点到点同步LSA成本小 多点接入网络同步LSA成本大,需要DR/BDR 由于MA网络中,任意两台路由器都需要传递路由信息,网络中有n台路由器,则需要建立n*(n-1)/2个邻接关系。任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源,DR和BDR应运而生!…