I LOVE YOU TOO密码解析

前几天看到网上一篇文章,讲一个男生向心仪的女生告白,女生给出了一段摩斯密码,在无数好心人的帮助下,最后解出了密码。出于好奇,我去了贴吧,找到了原来的贴子:

HighnessC 写道
求救,我已经快想爆了。

最近和一个心仪的女生告白,
谁知道她给了一个摩斯密码给我,说解出来了才答应和我约会。
可是我用尽了所有方法都解不开这个密码。。好郁闷阿。只能求教你们了。

****-/*----/----*/****-/****-/*----/---**/*----/****-/*----/-****/***--/****-/*----/----*/**---/-****/**---/**---/***--/--***/****-/

她唯一给我的提示就是这个是5层加密的密码..
也就是说要破解5层密码才是答案..
好郁闷阿..
救救我吧..

我本人不懂摩斯密码,当然,也不懂怎么解码,不过还是看了网上的密码解析,原来这段密文的意思是“I LOVE YOU TOO”,恭喜下他们~看了很多网上很多相关的文章,发现大家对解密过程中的有些步骤还不是很了解,或者说是解密的文章中没有说清楚,所以这里整理一下整个解密过程(只是整理 ,不是我想出来的):

1、参考摩斯密码对照表,得到对应数字组合4194418141634192622374

2、数字分组41 94 41 81 41 63 41 92 62 23 74,发现个位数总是1~4 ,有人提示手机键盘,41对应数字键4的第一个字母,类推后得到G Z G T G O G X N C S

3、根据女生的提示——她说途中有一个步骤是"替代密码"而密码表则是我们人类每天都可能用到的东西,这里强人想到了键盘,标准键盘为世界所公认,“码表 QWE=ABC依次类推”(这句话让很多人搞不清楚,导致推不出答案)。其实就是从键盘字母左上角开始,从左向右,从上到下进行对照,下面给出具体的对应关系

qwe=abc

rty=def

uiop=ghij

asd=klm

fgh=nop

jkl=qrs

zxc=tuv

vbnm=wxyz

根据这个对应关系,得到O T O E O I O U Y V L

4、至此,差不多可以猜到答案了,将字母分成两排

OTOEOI

OUYVL

得到OOT UOY EVOL I

5、倒序一下得到I LOVE YOU TOO

 

至此,答案就出来了!发现破解密码还是挺有意思的,当然,前提是破出来了,破不出来那感觉就不怎么样了,就像HighnessC刚开始那样。作为开发者,除了写程序偶尔也该换点花样搞搞脑子,呵呵~

 

P.S.我写完这篇文章时,那个贴子已经2000楼了,再次祝福一下他们。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是过滤注释的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LEN 1000 int main(int argc, char *argv[]) { if (argc != 2) { printf("Usage: %s <segment number>\n", argv[0]); exit(1); } int segment_num = atoi(argv[1]); if (segment_num < 1 || segment_num > 5) { printf("Segment number should be between 1 and 5\n"); exit(1); } FILE *fp = fopen("dict.dic", "r"); if (fp == NULL) { printf("Failed to open dict.dic\n"); exit(1); } int end_lines[5]; for (int i = 0; i < 5; i++) { fscanf(fp, "%d", &end_lines[i]); } char line[MAX_LINE_LEN]; int cur_line_num = 0; int in_comment = 0; while (fgets(line, MAX_LINE_LEN, fp)) { cur_line_num++; if (cur_line_num > end_lines[segment_num - 1]) { break; } int len = strlen(line); int i = 0; while (i < len) { if (line[i] == '/' && i + 1 < len) { if (line[i + 1] == '/') { if (!in_comment) { printf("\n"); } break; } else if (line[i + 1] == '*') { in_comment = 1; i++; } } else if (line[i] == '*' && i + 1 < len) { if (line[i + 1] == '/') { in_comment = 0; i++; } } else { if (!in_comment) { printf("%c", line[i]); } } i++; } } fclose(fp); return 0; } ``` 该代码可以读取名为dict.dic的文本文件中的特定代码段,并过滤掉其中的注释。输入为1-5中的一个数字,代表需要读取的代码段编号。对于输入为1,输出结果如下: ```c #include<stdio.h> int main() { int a = 10 , b = 2 , c ; c = a / b ; printf("I love programming C.\n") ; printf("I hope you love it too!\n") ; return 0 ; } ``` 可以看到,所有的注释都被成功地过滤掉了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值