这其实是湖大一个同学的作业,前几天我这个隔壁学校的被求助,然后翘了一节课帮她写出来的,若不是妹纸我才没那么积极呢[偷笑]。 所以,湖大的同学若果想要用这份代码交作业请慎重,以免老师追究。
现已知一份密文: hdqtrnyoenahauiniorpaiduaubidofdaletcndnnoertenteavcfhacukeatpv.
fcyynatyneucusanedthrepetoctnhukrlhnadiywieosrsifooueeoitaanevui
osjtosvtmfnflfnunnamentntemfoehmtiouttrgpnyrihaaceerleihvohhhasrc,
svtnttnszycteetieelhoifiehde9tshtpturolrhlaveatrei'8aoahcensfliiy,
inmysmss5nroeheiitapsrcnto.iinpfdlypuavthnpteacmuitnorociuanneyedl
onpeistiiworoueradr,poiroi,lciesijpnkytntssinniwtilesstnerseuyuhii
ctgcnasenoarccitlasnettthxaelhntnfyltorireipyuueildcoaeefou2ruaecvr
.arwalcinrnoifd1icnrreeateenyitoinflee1ttdeersbessgatyraitiddayips
tsic
已知它是使用二维易位方法加密 但现在密钥未知(不超过25),明文中的空格在加密时去除,所有字符全小写 加密时若最后一行不全,则用a到z按顺序填充, 解密后把填充在末尾的a-z去掉得到明文。
例如: 明文为:today is friday
去掉空格后:todayisfriday
密钥为3:
today
isfri
dayab
在明文后填充了ab
密文为:tidosadfyarayib
解密后得:todayisfridayab [img]
手动断句后去掉填充的ab,可得明文。
所以,对明文进行加密的思路是:
1、将明文中的空格去掉;
2、将明文的字符数根据密钥(key)进行补齐(补以abc....);
3、将明文按照先行后列的顺序把字符放入二维数组矩阵中;
4、将二维数组中的字符按照先列后行的顺序取出并串成密文。
以下是几个关键方法的代码实现
/**
* 加密算法
* @param key 密钥
* @param foremsg 明文
* @return
*/
public String encrypt(int key,String foremsg) {
int len = foremsg.length() / key;
int low = key;//行
int col = len; //列
String newString = "";
array = new String[low][col];//数组矩阵
System.out.println("正序数组:");
for (int i = 0; i < low; i++) {//循环依次放入数组中 先行后列
for (int j = 0; j < col; j++) {
if(count<foremsg.length()){//避免数组越界
array[i][j] = foremsg.substring(count,count+1);//返回指定索引处的 char 值
System.out.print(array[i][j]+" ");
}
count ++;
}
}
System.out.println();
System.out.println("逆序数组:");
for (int j = 0; j < col; j++) {//循环输出(按矩阵反序)PPT第6页 先列后行
for (int i = 0; i < low; i++) {
newString = array[i][j];
jiami_msg += newString;//连接成串
System.out.print(newString+" ");
}
}
System.out.println();
return jiami_msg;
}
/**
* 删除空格
*/
private void deteleSpace() {
String stringNoSpace = "";
while (foremsg.indexOf(" ") != -1) {
stringNoSpace += foremsg.substring(0, foremsg.indexOf(" "));//存空格前
foremsg = foremsg.substring(foremsg.indexOf(" ") + 1);//存空格后
}
stringNoSpace += foremsg;//连接
aftermsg= stringNoSpace;//赋值
}
/**
* 整理字符串
* @return 整理之后的字符串
*/
private String addDivide() {// 后面补充ab....
int len = aftermsg.length();
String str1 = aftermsg;
if (len % key != 0) {
for (int i = 0; i < key - len % key; i++) {
str1 += String.valueOf((char) (97 + i));//将char变量转换为字符串 i = 0 时为a
}
foremsg = str1;//此时的foremsg为去空格且补齐的串
}
return foremsg;
}
有了加密算法,解密的过程就显得容易多了,无非是将加密过程倒过来。
1、将密文的字符按照先列后行的顺序放入二维数组;
2、将二维数组中的字符按照先行后列的顺序取出数组并串成明文。
由于计算机只负责计算,所以需要手动断句并将补齐的字符去掉。
解密代码如下:
/**
* 解密的方法
* @param key 密钥
* @param minwen_msg 密文
* @return mingwen_msg 明文
*/
public String decrypt(int key,String miwen_msg) {
int len = miwen_msg.length() / key;
int low = key;
int col = len;
String newString = "";
array = new String[low][col];//数组矩阵
System.out.println("密文正序数组:");
for (int j = 0; j < col; j++) {//循环依次放入数组中 先列后行
for (int i = 0; i < low; i++) {
if(count <miwen_msg.length()){//避免数组越界
array[i][j] = miwen_msg.substring(count,count+1);//返回指定索引处的 char 值
System.out.print(array[i][j]+" ");
}
count ++;
}
}
System.out.println();
System.out.println("密文解密后数组:");
for (int i = 0; i < low; i++) {//循环输出(按矩阵正序)PPT第6页 先行后列
for (int j = 0; j < col; j++) {
newString = array[i][j];
mingwen_msg += newString;
System.out.print(newString+" ");
}
}
System.out.println();
return mingwen_msg;
}
解密之后并断句可得明文:
/**
* 密钥为23,明文如下。
* hunan university,situated at the foot of the picturesque yuelu hilland on the west bank of the
* rippling xiang river in the historically and culturally renowned city of changsha,capital city of hunan province,
* is honored as an ancient millenarian academy,famous centennial university.it is one of the key universities affiliated
* with the ministry of education and is now included in the state's project 211 and project 985 for priority investment and construction.
* professor liu keli and professor zhao yueyu are respectively the party secretary of the cpchunan university committee and the president
* of the university.
*/
其实有了加解密算法,这个程序可以通过IO实现对文件的加密解密,再用SWing界面加以可视化操作,简直上了一个档次,无奈近来事儿多,暂且搁置吧。
附件中有程序源代码。
- 大小: 10.8 KB
分享到:
相关推荐
5. **解密过程**:与加密相反,解密是逆向执行加密过程,即使用相同的密钥对密文进行反向位移。 在MFC的Debug目录下,可能包含的是编译后的可执行文件,用于运行和测试这个易位加密算法的应用程序。调试信息也可能...
移位加密算法的基本思想是将明文中的每个字符按照预定的位数进行左移或右移。例如,如果设定的移位数为3,那么字母"A"就会被加密为"D"(在字母表中向右移3位)。这种算法的实现简单,但安全性相对较低,因为其易于被...
加密密钥是用于加密和解密的密钥,而加密算法是将明文和密钥数字结合起来进行加密运算的算法。 加密技巧包括置换密码、易位密码、-block密码和公钥密码等。置换密码是将明文中的一组字母或每组字母由另一个或另一组...
密钥在加密和解密过程中起到决定性作用,不同的加密方法对应着不同的密钥类型。 密码算法主要分为以下几类: 1. 按照明文到密文的转换方式,可以分为置换密码和易位密码。例如,恺撒密码是一种简单的置换密码,通过...
加密过程是通过加密算法和密钥将明文转化为密文,解密则反之。加密算法分为对称加密和非对称加密,前者如DES,同一密钥用于加密和解密;后者如RSA,使用一对公钥和私钥,公钥用于加密,私钥用于解密。此外,还有序列...
为了提高加密安全性,通常需要对初始的完全二叉树进行剪枝和易位操作。剪枝操作是将以Pi为根的子树插入到只有一个孩子的节点下,作为其左孩子或右孩子。易位操作则是交换以Pi和Pj为根的子树位置。这样的操作可以使得...
一个密码系统完成如下伪装:加密者对需要进行伪装机密信息(明文)进行伪装进行变换(加密变换),得到另外一种看起来似乎与原有信息不相关的表示(密文)。如果合法者(接收者)获得了伪装后的信息,那么他可以通过...
理解非对称加密的过程,发送方使用接收方的公钥对数据进行加密,这样即使数据在传输过程中被截获,也无法被未拥有对应私钥的第三方解密。接收方接收到加密数据后,使用自己的私钥进行解密,从而保证了信息的安全性。...
例如,要加密的明文是"HELLO”,可以将每个字符转换成对应的摩尔斯电码,得到密文".... . .-.. .-.. ---”。摩尔斯密码是一种简单易懂的密码形式,但它的安全性较低。 5. 字母频率密码 字母频率密码是一种基于...
通过对密文中的字母频率进行统计,可以推测出可能的明文。 6. **维热纳尔方阵**:为了克服词频分析的破解方式,维热纳尔创造了这个矩阵,使得每个字母都与一个不同的偏移字母相对应,增加了破解难度。这种方法需要...
石墨烯纳米孔是利用石墨烯这种二维材料所制成的纳米级孔洞,这种材料具有超薄的特性,可以用来构建用于DNA检测的纳米孔。石墨烯的原子级厚度,使其具备了其他材料所不具备的高分辨率识别能力,这对于进一步开发高...
timopheevii Zhuk.)渐渗系的区分及易位断点的判定1,纪剑辉,曹爱忠,研究采用小麦2B染色体上的63对SSR标记、STS标记对从瑞士引进的含抗白粉病基因Pm6的八份渐渗系进行了分析,通过分子标记标图来确定8份�
关于野生生物易位和对疾病传播的潜在风险的评估,在保守项目中已经取得了一些进展。 然而,其他因素,例如从筛查中心从不同地点接收到的大量物种,被车辆撞倒后被救出,由公众带走或被当局没收非法贸易等,增加了人...
- **棋盘表示**:通常,可以使用二维数组(如`char[8][8]`)来表示棋盘,每个元素存储棋子的类型或空位。 - **棋子类**:为每种棋子(如兵、车、马、象、后、王)创建一个类,包含棋子的位置、移动规则等属性。 -...