在密码学中,恺撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
例如,下面是凯撒密码的偏移量k=3的情况
初始字母顺序: 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 凯撒变换后 : D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
这样,消息"VENI, VIDI, VICI"(著名的恺撒语录:拉丁语,意思"I came, I saw, I conquered",中文译为“我来了,我看见了,我征服了”),就将被加密为"YHQL, YLGL, YLFL"。
请编写代码实现恺撒密码。
输入:
偏移量K
待加密的字符串
输出:
加密后的字符串。注意只需用对大小写字母进行变换,其它字符原样输出
样例输入:
3↵
The□quick□brown□FOX□jumps□over□the□lazy□DOG.↵
A□bird□in□the□hand□is□worth□than□two□in□the□bush.↵
Failure□is□the□mother□of□success.↵
样例输出:
Wkh□txlfn□eurzq□IRA□mxpsv□ryhu□wkh□odcb□GRJ.↵
D□elug□lq□wkh□kdqg□lv□zruwk□wkdq□wzr□lq□wkh□exvk.↵
Idloxuh□lv□wkh□prwkhu□ri□vxffhvv.↵
01.import java.util.Scanner;
02./*
03. * 恺撒密码
04. */
05.public class Main {
06. public static void main(String[] args)throws Exception {
07. Scanner cin = new Scanner(System.in);
08. //定义偏移量
09. int k = cin.nextInt();
10. //输入要加密的内容
11. String insertStr = cin.nextLine();
12. //调用加密处理方法
13. while(cin.hasNext()){
14. insertStr = cin.nextLine();
15. deal(insertStr,k);
16. }
17. }
18. //根据偏移量k处理字符
19. private static void deal(String text,int k){
20. //在录入的字符转换为字符数组
21. char [] dealStr = text.toCharArray();
22. for(int i=0;i<dealStr.length;i++){
23. //如果为小写字母时
24. if(dealStr[i]>='a' && dealStr[i]<='z'){
25. //根据字符acsi表编码序号
26. dealStr[i]=(char)(((int)dealStr[i] + k - (int)'a')%26 + (int)'a');
27. //如果为大写字母时
28. }else if(dealStr[i]>='A' && dealStr[i]<='Z'){
29. //根据字符acsi表编码序号
30. dealStr[i]=(char)(((int)dealStr[i] + k - (int)'A')%26 + (int)'A');
31. }
32. }
33. //输出加密后字符
34. System.out.println(dealStr);
35. //退出程序
36. System.exit(0);
37. }
38.}