eden破解密文

题目名称

破解密文

题目描述

题目大意:Mo and Larry have devised a way of encrypting messages. They first decide secretly on the number of columns and write the message (letters only) down the columns, padding with extra random letters so as to make a rectangular array of letters. For example, if the message is "There‘s no place like home on a snowy night" and there are five columns, Mo would write down t o i o y h p k n n e l e a i r a h s g e c o n h s e m o t n l e w x Note that Mo includes only letters and writes them all in lower case. In this example, Mo used the character `x‘ to pad the message out to make a rectangle, although he could have used any letter. Mo then sends the message to Larry by writing the letters in each row, alternating left-to-right and right-to-left. So, the above would be encrypted as toioynnkpheleaigshareconhtomesnlewx Your job is to recover for Larry the original message (along with any extra padding letters) from the encrypted one.

输入:Input will consist of two lines. The first line will contain an integer in the range 2 . ..20 indicating the number of columns used. The next line is a string of up to 200 lower case letters.

输出:giving the original plaintext message, with no spaces and a new line in the end.

样例

输入:

3
ttyohhieneesiaabss

输出:
thisistheeasyoneab

HINT

数组操作。

scanf("%d", &num);
char tempChar = getchar();
char str[201];
gets(str);
int len = strlen(str);

题目难度

0

我的理解

给一串信息进行加密处理,加密方式是将该串信息以矩阵一列一列输入,如果矩阵没有满则随机补充到最后形成一个完整的矩阵,然后以一列一列蛇形输出(即第一行从左到右第二行从右到左,第三行又从左到右依次类推),输出的数字串即为加密后的密码。

举个例子:需要对xiaoyubei进行加密,则输入变成矩阵xob一列一列地输入,刚好填满,然后蛇形输出xobeyiaui那么这个得到的就是密码。

iye

aui

题目给定输入是加密后的密码,需要你进行输出原本的信息;即输入了xobeyiaui让我们转换为xiaoyubei。

方法&解释

这一题我就直接以二维数组a来储存输入并且输入以按照它加密的矩阵形式排列,关键在输入成为这样一个矩阵,那么输出即直接一列一列输出即可;

我直接用i表示输入列数,循环从1->n,j表示行数,最开始为1,每一次i==n时,j++,说明一行结束,输入储存a数组时要判断j是奇数还是偶数,如果j为奇数则按照从左到右的顺序,如果j是偶数则按照从右往左的顺序,最后矩阵完成,要以‘\n‘结束判断,原本应该是‘\0‘题目所给的,我也不知道为什么,等下我再查一查,修改一下,要注意最开始输入n的时候有一个回车,这个字符要消除掉,否则会影响后面的输入。

我的代码

 1 #include<stdio.h>
 2 int main() {
 3     int n;
 4     scanf("%d", &n);
 5     char a[20][20] = {0};
 6     char t;
 7     scanf("%c", &t);
 8     int i = 1, j = 1, k = 0;
 9     while (t != ‘\0‘) {
10         if (k == 1) break;
11         for (i = 1; i <= n; i++) {
12         scanf("%c", &t);
13         if (t != ‘\n‘) {
14             if (t < ‘a‘) {
15                 t = t + ‘a‘ -‘A‘;
16             }
17             if (j % 2 == 0) {
18                 a[j][n - i + 1] = t;
19             } else {
20                 a[j][i] = t;
21             }
22         } else {
23             k = 1;
24             break;
25         }
26         if (i == n) j++;
27         }
28     }
29     int row = j - 1;
30     for (j = 1; j <= n; j++) {
31         for (i = 1; i <= row; i++) {
32             printf("%c", a[i][j]);
33         }
34     }
35     printf("\n");
36 }

标程代码

 1 /*
 2  * this is the direct but stupid way. you can improve it by yourself by using one array.
 3  */
 4
 5 #include<stdio.h>
 6 #include<string.h>
 7
 8 char tmp[101][21];
 9 char temp[101][21];
10
11 int main() {
12     int num, i, j;
13     // for input.
14     scanf("%d", &num);
15     char tempChar = getchar();
16     char str[201];
17     gets(str);
18     int len = strlen(str);
19     int row = len/num;
20     for (i = 0; i < len; i++) {
21         tmp[i/num][i%num] = str[i];
22     }
23     // for processing.
24     for (i = 0; i < row; i++) {
25         for (j = 0; j < num; j++) {
26             if (i%2 == 1) temp[i][j] = tmp[i][num - j - 1];
27             else temp[i][j] = tmp[i][j];
28         }
29     }
30     // for output.
31     for (i = 0; i < num; i++) {
32         for (j = 0; j < row; j++) {
33             printf("%c", temp[j][i]);
34         }
35     }
36     printf("\n");
37     return 0;
38 }

标程解释

我先去吃个饭,等下回来再写(我的代码和方法那里还没有写完),你先看看,大概应该可以理解了。

时间: 2024-07-31 09:07:36

eden破解密文的相关文章

【毕业设计日记-4月】已经破解密文

今天进度比较快. 上午对着书用wireshark找上次抓过的包,分析信息,我之前一直以为传递的数据信息会在 这个请求报文里,没想到其实在响应报文里. 看到这些熟悉的标识符就知道找对了,因为源程序中最后发送出去的内容也是msgContent,这两个密文也符合之前的明文"hi" "hey man"(字符串长度差,第一个字符一样). 今天主要最困惑的是之前这个函数 不知道他的用处到底是什么,之前还猜想是对汉字这种特殊编码进行转换.今天请教了实验室一个学长,他说这个就是把字

单片机 防破解 技术论述

单片机防破解,近几年专门针对于产品设计,最终在产品程序加密这一块,发现是一个非常实际的问题,公司研发产品几十万,竞争对手花几万破解复制你的产品,而其他竞争对手能够使用更低的成本复制已经被破解的产品,让你的产品在短短1个月内成为烂大街的货:在这种市场风气下非常阻碍具备创新能力公司的发展:因此在3个月各种询问以及沟通过程中,从如何破解单片机系统到如何防止破解进行说明,希望能够帮助具有相同需求的朋友:在此利用市场上破解率最高的STM32单片机来说明.一.破解单片机系统,分为两步:1.从单片机中将二进制

MD5加密和RSA加密

1.MD5加密  MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用. MD5的功能:     ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹):    ②.不同的输入得到的不同的结果(唯一性):    ③.根据128位的输出结果不可能反推出输入的信息(不可逆),也就是只能加密,不能解密:  MD5的用途:     1.防止被篡改:    1)比如发送一个电子文档,发送前,我先得到MD5的

Try2Hack 过关技巧和密码

官网:http://www.try2hack.nl/levels 玩到第五关实在是过不去了,因为那个程序太老了,win7根本就运行不了,崩溃. 转自:http://blog.csdn.net/chinacodec/article/details/4002518 大学时代喜欢玩一些 hack 游戏, 这个是当时尝试著名的 try2hack 时候做得过关纪录 第一关: Password: hackerzzz 提示: 点右键看源代码 第二关: Username: Try2Hack Password:

java加密算法小结(2)--MD5加密算法

上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇来整理一下一个被广泛应用的加密算法---MD5. 简单了解 MD5(Message Digest Algorithm 5),翻译过来是消息摘要算法第五版,按照惯例,我们推理可能也有MD2,MD3这样名字的历史版本.. 即使完全不了解这个算法的原理,我们也可以从命名中看出一些眉道,所谓摘要,就是一个简短的概括,像我写过的毕业论文,上来第一部分就是摘要,它对后面长篇大论的文章做了一个简短有力的概

浅谈 PHP 中的多种加密技术及代码示例

信息加密技术的分类 单项散列加密技术(不可逆的加密) 属于摘要算法,不是一种加密算法,作用是把任意长的输入字符串变化成固定长的输出串的一种函数 MD5 string md5 ( string $str [, bool $raw_output = false ] ); //MD5加密,输入任意长度字符串返回一个唯一的32位字符 md5()为单向加密,没有逆向解密算法,但是还是可以对一些常见的字符串通过收集,枚举,碰撞等方法破解;所以为了让其破解起来更麻烦一些,所以我们一般加一点盐值(salt)并双

CryptoJS加密(网络安全)

CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法. des对称加密 在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去.收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文. <script src="core.js" ></script> <script src="enc-base64.js

java加密算法小结--MD5加密算法

上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇来整理一下一个被广泛应用的加密算法---MD5. 简单了解 MD5(Message Digest Algorithm 5),翻译过来是消息摘要算法第五版,按照惯例,我们推理可能也有MD2,MD3这样名字的历史版本.. 即使完全不了解这个算法的原理,我们也可以从命名中看出一些眉道,所谓摘要,就是一个简短的概括,像我写过的毕业论文,上来第一部分就是摘要,它对后面长篇大论的文章做了一个简短有力的概

RSA算法详解

1.RSA加密算法是最常用的非对称加密算法 2.RSARSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名, 3.目前学术界无法证明RSA算法的绝对正确性,但是也无法证明否定它的安全性,因此恰恰说明该算法有相当的可信性. 4.RSA原理基于大数分解的难度,其公钥和私钥是一对大素数对的函数,从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题) 5.具体的加密,解密,流程 RSA的公钥.私钥的组成,以及加密.