实验2 仿射密码算法
【一、实验目的】
通过实验熟练掌握仿射密码算法的加密解密过程,加深对古典密码体制的了解,为深入学习密码学奠定基础。
【二、实验原理】
设两个整数α和β,及gcd(α,26)=1,
加密过程:x → αx+β (mod 26)
解密过程:x → α*(x-β) (mod 26) 其中α•α*= 1(mod 26)
这种加密方法的密钥就是一对(α,β),对gcd(α,26)=1中的α有12种可能的选择,对β有26种选择(因为用mod 26来计算,所以仅需要考虑介于0~25之间的α和β,因此密钥值一共有12•26=312种选择。
【三、实验内容】
下列密文是用仿射密码加密的:edsgickxhuklzveqzvkxwkzukcvuh,请解密。
【四、实验源码】
Affine.java
public class Affine {public String deciphering(String s,int a, int b){// 解密的实现char[] ch = s.toCharArray();int length = ch.length;// 密文长度int[] in = new int[length];for (int i = 0; i < ch.length; i++) {in[i] = ch[i] - 97;// 利用ascii变成0-25数字}for (int i = 0; i < length; i++) {in[i] = ((in[i] - b) * a) % 26;// 解密算法if (in[i] < 0) in[i] += 26;}for (int i = 0; i < ch.length; i++) {ch[i] = (char) (in[i] + 97);// 将数字变成字母}return String.valueOf(ch);// 将字符串数字变成String类型的字符串,返回}
}
Test.java
public class Test {public static void main(String[] args) {Arithmetic arithmetic = new Arithmetic();final int MOD = 26;int [] gcd = new int[12];int m = 0;String out = null;for(int i=1;i<MOD;i++){if((arithmetic.euclid(i,MOD))==1) { //求与26互素的数gcd[m] = (arithmetic.euclid_2(i,MOD)+26)%26; //求这些数mod26的逆,并把它加入gcd数组m++;}}Scanner input = new Scanner(System.in);String s = input.nextLine();// 输入密文Affine affine = new Affine();int k =1;for(int i=0;i<12;i++) {for (int j = 0; j < 26; j++) {out = affine.deciphering(s, gcd[i], j);System.out.println("第"+k+"条明文为:"+out);k++;}}}
}
说明:输入需要解密的密文,设置循环:α可取值为12个,β可取26个值,分别取出α和β的组合,作为实参调用解密函数deciphering,之后按顺序输出每次解密出的明文。
【五、实验截图】
(1)
说明:直接调用上次写的求逆函数,求于26互逆的数即α,并把它们加入gcd[]数组备用。
(2)
说明:输入需要解密的密文,设置循环:α可取值为12个,β可取26个值,分别取出α和β的组合,作为实参调用解密函数deciphering,之后按顺序输出每次解密出的明文。
(3)
说明:解密函数,先将字符逐个转换成数字,然后根据当前传入的α和β的值,将每个字符对应的数字解密:in[i] = ((in[i] - b) * a) % 26;再将解密后的数字转换成相应的字符,最后合成相应的字符串返回。
(4)输出结果
说明:输入需要解密的密文:edsgickxhuklzveqzvkxwkzukcvuh,之后按照不同α和β的组合按顺序输出解密的密文,最后再第115行找到了正确的明文。
实验2 仿射密码算法相关推荐
- 古典密码算法实验c语言,2021信息安全 实验一 古典密码算法C语言.docx
2021信息安全 实验一 古典密码算法C语言.docx 信息安全信息安全 实验一实验一 古典密码算法古典密码算法 C C 语言语言 信息安全实验报告 课程名称 _ 专业计算机科学与技术 _2010_级 ...
- 密码学—仿射密码实验报告
古典密码算法实验报告 姓名:空の城 学号:你猜 专业班级:网络安全专业 一.实验目的 通过编程实现替代密码算法--仿射密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础. 二.实验原理 仿射 ...
- 古典密码算法实验c语言,古典密码实验报告.doc
古典密码实验报告.doc 哈尔滨工程大学实验报告实验名称古典密码算法班级学号姓名实验时间2014年4月成绩指导教师实验室名称哈尔滨工程大学实验室与资产管理处制一.实验名称古典密码算法2.实验目的通过编 ...
- 密码学实验报告c语言程序,密码学_实验一_古典密码算法_C语言.doc
您所在位置:网站首页 > 海量文档  > 高等教育 > 实验设计 密码学_实验一_古典密码算法_C语言.doc8页 本 ...
- 仿射密码实验——Python实现(完整解析版)
文章目录 前言 实验内容 实验操作步骤 1.编写主程序 2.编写加密模块 3.编写解密模块 4.编写文件加解密模块 实验结果 实验心得 实验源码 scirpt.py usefile.py 前言 实验目 ...
- 信息安全密码学实验一:古典密码算法的设计与实现
古典密码算法的设计与实现 1.仿射密码 加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是: C=Ek(m)=(k1m+k2)mod n D=(c-k2)mod n package cz ...
- 信息安全实验-古典密码算法
1.实验步骤 古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密. (1)替代密码 替代密码算法的原理是使用替代法进行加密,就是对明文中的字符用其他字符替代后形成密文.例如,明 ...
- 仿射密码解密(Affine Cipher)
仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C D E F G H I J K L M N O P Q R S T U V ...
- 【现代密码学】仿射密码加密
//仿射变换主要是乘法与加法变换的结合 //C=a*m+k mod 26 加密 //M=a^-1(c-k)mod 26 解密 #include <iostream> #include< ...
最新文章
- HDU1827(强连通分量)
- .net版 类似火车头的网页采集
- Happy Number
- 求助matlab分解质因数,Matlab
- pytorch实现性别检测
- springboot socket服务端_从零开始学SpringBoot之Spring Boot WebSocket:编码分析
- 《编码规范和测试方法——C/C++版》学习笔记 ·002
- 禁用并删除 Wordpress 文章修订(revision)记录
- IE6 CSS高度height:100% 无效解决方法总结
- 在线投稿审稿管理系统mysql_某期刊在线投稿审稿管理系统.doc
- kali linux查看局域网下所有IP,并对指定IP实施局域网内攻击
- Ubuntu中修改Home目录下中文目录为英文
- 最小生成树(库鲁斯卡尔算法)
- 斑马打印机常见问题解决方案 条码打印机常见问题解决方案
- Call From hadoop102/192.168.10.102 to hadoop102:8020 failed on connection exception: java.net.Connec
- C#获取目录下所有文件的列表——最白话,手把手教你做系列。
- 【JavaScript 逆向】极验三代无感验证码逆向分析
- Python分析《哈哈哈哈哈》第11期弹幕数据
- IBM赌未来:量子计算服务IBM Q系统今年上线
- 内涵段子维修服务器,登陆内涵段子的时候出现这个是什么504 Gateway T