问题 G: 土豪金的加密与解密

时间限制: 1 Sec  内存限制: 128 MB
提交: 466  解决: 263
[提交][状态][讨论版]

题目描述

    有一位姓金的同学因为买了一部土豪金,从此大家都称他为土豪金。
    土豪金是一个网络迷,在网络上的帐号多得数不胜数,为了能记住各种各样的帐号和密码,他一般写在记事本上或一个专门的帐号密码文件中。近期,为了加强这些私有信息的安全,他开始琢磨如何对密码进行一些简单的加密处理。
 

有一天,他准备用手机打电话,当他打开键盘(如图示)准备拨号时,突发奇想,我为什么不利用这个键盘上的信息来加密呢?

土豪金的帐号密码是由大写字母和数字组成的,于是他便利用键盘上的12个按键制订了一个简单的加密规则,用于对自己各种帐号的密码进行加密,以防止别人轻易地获知其密码。
    土豪金琢磨的规则是这样的:
1)如果是数字,除了0和1不变外,其它的数字都把它变成对应按键上的大写字母。只要是这个按键上的大写字母,随便哪个字母都行。例如,原来的密码是“1110023”,则可加密变成“11100AD”,也可变成“11100BF”或“11100CE”等形式。
2)如果是大写字母,就把它变成对应按键上的数字字符串。但数字的个数等于字母在该键上所处的位置号。例如,若原来的密码是“A”,则可加密变成”2”;若原来的密码是“B”,则可加密变成“22”; 若原来的密码是“C”,则可加密变成“222”。同理,若原来的密码是“S”,则可加密变成“7777”。
3)按规则1)和2)加密后的字符可以根据需要,用星号“*”隔开。这主要是对第2条规则进行完善,因为若原来的密码是“AB”,则按规则加密变成“222”,但这时“222”解密时会有歧义,因此用星号隔开,就变成 “2*22”。加了这条规则后,凡是没用“*”号隔开的“重复数字”要取最长的进行解密。如对“222”进行解密,就只能是“C”,而不会是“AAA”或“AB”或“BA”
4)加密后的字符可以根据需要,用井号“#”开始加上一个字符串。从“#”开始的字符串是干扰别人解密的迷惑信息,解密时不用理它,弃之。
根据以上规则,下面举几个例子。
    1)        TUHAO123可以加密变成8*884426661AE
    2)        TUHAO123可以加密变成8*88*4426661BF
    3)        TUHAO123可以加密变成8*88*4426661BF#ER23
自从土豪金用这个规则后,记事本上再也不用明文去记帐号的密码了,而记的都是经过他加密以后的密文。但是,当他忘记账号的密码后,就要到记事本上来查,但他觉得对密文进行人工解密太麻烦了,于是他向你这个编程高手求助,请你写一程序,帮助他把记事本上记的密文快速的解密成明文。注:解密就是按上述规则进行逆向处理。
    例1,当输入是“8*88*4426661BF#ER23”时,经过你程序的解密处理,应该输出“TUHAO123”;
    例2:当输入是“4445556668883399966688”时,经过你程序的解密处理,应该输出“ILOVEYOU”。
    例3:当输入是“TUHAO”时,经过你程序的解密处理,应该输出“88426”。
    例4:当输入是“11100BF”时,经过你程序的解密处理,应该输出“1110023”。

输入

输入一行字符串。字符串长度不超过50。该字符串表示对明文加密后的密文。
注意:只有一组数据。

输出

根据输入的密文,解密成明文后输出。

样例输入

8*884426661AE

样例输出

TUHAO123

打个表就好了
#include <cstdio>
#include <cstring>
char tw[][]={'A','B','C','','D','E','F','','G','H','I','','J','K','L','','M','N','O','','P','Q','R','S','T','U','V','','W','X','Y','Z'};
char matht(char a)
{
char k;
if(a<='C') k='';
else if(a<='F'&&a>='D') k='';
else if(a<='I'&&a>='G') k='';
else if(a<='L'&&a>='J') k='';
else if(a<='O'&&a>='M') k='';
else if(a<='S'&&a>='P') k='';
else if(a<='V'&&a>='T') k='';
else if(a<='Z') k='';
return k;
}
char eng(char n,int l)
{
if(n=='') return tw[][l];
else if(n=='') return tw[][l];
else if(n=='') return tw[][l];
else if(n=='') return tw[][l];
else if(n=='') return tw[][l];
else if(n=='') return tw[][l];
else if(n=='') return tw[][l];
else return tw[][l];
}
int main()
{
int n,o=,i,q;
char s[],c[];
scanf("%s",s);
int l=strlen(s);
for(i=;i<l;i++)
{
q=;
if(s[i]=='#')
break;
else if(s[i]=='*') continue;
else if(s[i]>='A'&&s[i]<='Z')
c[o++]=matht(s[i]);
else if(s[i]<''&&s[i]>='')
c[o++]=s[i];
else if(s[i]>=''&&s[i]<='')
{
while(s[i+]>=''&&s[i+]<=''&&(s[i+]-''==s[i]-''))
{
i++;
q++;
}
c[o++]=eng(s[i],q);
}
}
c[o]='\0';
printf("%s\n",c);
return ;
}

hnust 土豪金的加密解密的更多相关文章

  1. PHP的学习--RSA加密解密

    PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了. 举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了. 密码没加 ...

  2. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  3. .NET和JAVA中BYTE的区别以及JAVA中“DES/CBC/PKCS5PADDING” 加密解密在.NET中的实现

    场景:java 作为客户端调用已有的一个.net写的server的webservice,输入string,返回字节数组. 问题:返回的值不是自己想要的,跟.net客户端直接调用总是有差距 分析:平台不 ...

  4. php使用openssl进行Rsa长数据加密(117)解密(128) 和 DES 加密解密

    PHP使用openssl进行Rsa加密,如果要加密的明文太长则会出错,解决方法:加密的时候117个字符加密一次,然后把所有的密文拼接成一个密文:解密的时候需要128个字符解密一下,然后拼接成数据. 加 ...

  5. c#和js互通的AES加密解密

    一.使用场景 在使用前后端分离的框架中常常会进行传输数据相互加密解密以确保数据的安全性,如web Api返回加密数据客户端或web端进行解密,或者客户端或web端进行加密提交数据服务端解密数据等等. ...

  6. PHP AES的加密解密

    AES加密算法 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

  7. [PHP]加密解密函数

    非常给力的authcode加密函数,Discuz!经典代码(带详解) function authcode($string, $operation = 'DECODE', $key = '', $exp ...

  8. 非对称技术栈实现AES加密解密

    非对称技术栈实现AES加密解密 正如前面的一篇文章所述,https协议的SSL层是实现在传输层之上,应用层之下,也就是说在应用层上看到的请求还是明码的,对于某些场景下要求这些http请求参数是非可读的 ...

  9. 【转】asp.net(c#)加密解密算法之sha1、md5、des、aes实现源码详解

    原文地址:http://docode.top/Article/Detail/10003 目录: 1..Net(C#)平台下Des加密解密源代码 2..Net(C#)平台下Aes加密解密源代码 3..N ...

随机推荐

  1. Yii2 Working with Relational Data at ActiveDataProvider

    Yii2 Working with Relational Data at ActiveDataProvider namespace common\models; use Yii; use yii\ba ...

  2. AD7190的小总结

    1.单次转换模式 通过配置“模式寄存器的MD2.MD1.MD0为001”,便可启动单次转换. 流程“上电 -> 单次转换 -> 省电模式 ” , 片内振荡上电需要大约1ms.   单次转换 ...

  3. maven+jenkins发布环境

    安装java省略,下面是环境变量 export JAVA_HOME=/usr/java/jdk1.8.0_65/ export PATH=$JAVA_HOME/bin:$PATH export CLA ...

  4. 又一例网卡mtu值引发的问题

    通过php上传文件到云存储,很小的文件都无法上传,在别的服务器上测试可以,本机环境是ESXI虚机安装的centos 7版本 解决思路过程 1.让开发写一个单独测试上传的文件,不调php nginx配置 ...

  5. java Vamei快速教程12 类型转换和多态

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们之前使用类创造新的类型(type),并使用继承来便利我们创建类的过程.我将在这 ...

  6. StackOverflow之旅<2>------{HashMap和Hashtable的区别}

    问题 在Java中HashMap和Hashtable的区别? 哪一个对于多线程应用程序更好? 回答 Hashtable是同步的,加了synchronized锁,而HashMap不是.没有加synchr ...

  7. 【CF739E】Gosha is hunting(WQS二分套WQS二分)

    点此看题面 大致题意: 你有两种捕捉球(分别为\(A\)个和\(B\)个),要捕捉\(n\)个神奇宝贝,第\(i\)个神奇宝贝被第一种球捕捉的概率是\(s1_i\),被第二种球捕捉的概率是\(s2_i ...

  8. 5分钟了解Java 12 八大新特性

    Java 12 终于发布了,我们一起来看一看 Java 12 中的新特性.通过本文可以在5分钟内快速了解 Java 12 新特性. 1 Switch 表达式 使用Java 12,switch不仅可以作 ...

  9. 解决session过期跳转到登录页并跳出iframe框架(或者layui弹出层)

    当用户长时间停留在管理界面没有操作,等到session过期后,进行了操作,那么只是iframe跳转到login页面,这不是我们想要的结果.解决方法:在login页面加一个逻辑判断: <scrip ...

  10. idea右侧的工具栏不见,包括maven以及其他

    通用,设置后右侧工具栏可见 可以通过view-->windows tool看到maven的