来自于罗马的凯撒大帝最早的密码

据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F)。而你要获得消息原文,也就是要将这个过程反过来。 
密码字母: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 M 
原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U 
(注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。)
输入:最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成: 
1.  起始行:START 
2.  密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息. 
3.  结束行:END 
在最后一个数据集之后,是另一行:ENDOFINPUT。
输出:
每个数据集对应一行,是凯撒的原始消息。
n   Sample Input
START
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
END
START
N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
END
START
IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
END
ENDOFINPUT
n   Sample Output
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME
DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE

 

    //密码解析
    public class PasswordParse{
        //破解密码(一段/一行密码)的方法
        public void pwdParse(String str){
            for(int i=0;i<str.length();i++){
                char c = str.charAt(i);
                if('A'<=c&&c<='Z'){
                        if(c-5<'A'){
                            System.out.print((char)('Z'-'A'+c-5));
                        }
                        else{
                            System.out.print((char)(c-5));

                        }
                    }
                else
                    System.out.print((char)c);
            }
            System.out.println();
        }
        //执行破解之前对整段密文的整理解析
        public void doParse(String[] str){
            for(String s : str){
                if(s.startsWith("START")){
                    String pwd = (s.split("START")[1]).split("END")[0];
                    pwdParse(pwd);
                }
            }
        }
        public static void main(String args[]){
            String[] strs={
            "START NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX END",
            "START N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ END",
            "START IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ END",
            "ENDOFINPUT"
            };
            new PasswordParse().doParse(strs);
        }
    }

 

转载于:https://www.cnblogs.com/laoquans/archive/2013/03/16/2963327.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值