新浪博客

恺撒密码

2014-03-22 22:22阅读:
在密码学中,恺撒密码是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是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
ThequickbrownFOXjumpsoverthelazy&#9633
;DOG.
Abirdinthehandisworththantwointhebush.
Failureisthemotherofsuccess.

样例输出:
WkhtxlfneurzqIRAmxpsvryhuwkhodcbGRJ.

Deluglqwkhkdqglvzruwkwkdqwzrlqwkhexvk.
Idloxuhlvwkhprwkhurivxffhvv.

[java] view plaincopy
  1. public class Main{
  2. public static void main(String[] args) {
  3. // 偏移大小
  4. int offset = Integer.parseInt(StdIn.readLine());
  5. while (!StdIn.isEmpty()) {
  6. String inStr = StdIn.readLine();
  7. char[] arr = inStr.toCharArray();
  8. // 对单个字符解密
  9. for (int i = 0; i < arr.length; i++) {
  10. int chNum = arr[i];
  11. int passChar = 0;
  12. // 是否为英文字母
  13. if (chNum >= 97 && chNum <= 122) {
  14. passChar = chNum + offset;
  15. if (passChar > 122) {
  16. passChar = passChar - 123 + 97;
  17. }
  18. } else if (chNum >= 65 && chNum <= 90) {
  19. passChar = chNum + offset;
  20. if (passChar > 90) {
  21. passChar = passChar - 91 + 65;
  22. }
  23. } else {
  24. passChar = chNum;
  25. }
  26. arr[i] = (char) passChar;
  27. }
  28. // 输出
  29. System.out.println(arr);
  30. }
  31. }
  32. }


我的更多文章

下载客户端阅读体验更佳

APP专享