黑马程序员技术交流社区

标题: 字符串加密 [打印本页]

作者: xinchenglong    时间: 2013-8-26 14:46
标题: 字符串加密
入学测试题:求高手指导……
编写一个应用程序用来输入的字符串进行加密,对于字母字符串加密规则如下:
‘a’→’d’      ‘b’→’e’     ‘w’→’z’   ……    ‘x’→’a’    ‘y’→’b’     ‘z’→’c’
‘A’→’D’      ‘B’→’E’     ‘W’→’Z’    ……    ‘X’→’A’    ‘Y’→’B’     ‘Z’→’C’
对于其他字符,不进行加密。 十分感谢!!!!

作者: chung    时间: 2013-8-26 17:26
本帖最后由 chung 于 2013-8-26 17:38 编辑
  1. package test;

  2. import java.util.Scanner;

  3. public class CaeserTest {

  4.         public static char ascii2Char(int ASCII) {
  5.                 return (char) ASCII;
  6.         }

  7.         public static String ascii2String(int[] ASCIIs) {
  8.                 StringBuffer sb = new StringBuffer();
  9.                 for (int i = 0; i < ASCIIs.length; i++) {
  10.                         sb.append((char) ascii2Char(ASCIIs[i]));
  11.                 }
  12.                 return sb.toString();
  13.         }

  14.         public String encrypt(String str, int key){
  15.                
  16.                 char[] chars = str.toCharArray();
  17.                 int[] asciiArray = new int[chars.length];
  18.                 key = key%127;
  19.                
  20.                 for(int i = 0; i < chars.length; i++){
  21.                         //System.out.println((int)chars[i]);
  22.                         asciiArray[i] = (int) (chars[i]) + key;
  23.                         //System.out.println(asciiArray[i]);
  24.                 }

  25.                 return ascii2String(asciiArray);
  26.         }
  27.        
  28.         public String decrypt(String str, int key){
  29.                 char[] chars = str.toCharArray();
  30.                 int[] asciiArray = new int[chars.length];
  31.                 key = key%127;
  32.                 for(int i = 0; i < chars.length; i++){
  33.                         //System.out.println((int)chars[i]);
  34.                         asciiArray[i] = (int) (chars[i]) - key;
  35.                         //System.out.println(asciiArray[i]);
  36.                 }
  37.                 return ascii2String(asciiArray);
  38.         }
  39.        
  40.         public static void main(String[] args) {
  41.                 CaeserTest ct = new CaeserTest();
  42.                 System.out.println("输入明文字符串:");
  43.                 Scanner input = new Scanner(System.in);
  44.                 String str = input.nextLine();
  45.                
  46.                 System.out.print("输入密钥:");
  47.                 int key = input.nextInt();
  48.                
  49.                 System.out.println("输出密文字符串:" + new String(ct.encrypt(str, key)));
  50.                 System.out.println("输出明文字符串:" + new String(ct.decrypt(ct.encrypt(str, key), key)));
  51.         }

  52. }
复制代码
凯撒密码简单的加解密实现
作者: xinchenglong    时间: 2013-8-26 20:44
还是不太懂,但是还是要谢谢你!
作者: brucel50    时间: 2013-8-26 21:32
太雷人了。。。
提问的人和回答的人都没看是哪个交流区的···
作者: 心动行动    时间: 2013-8-27 21:24
Dictionary<char, char> dic = new Dictionary<char, char>();  //声明一个键值对集合
            string str1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  //准备添加到键值对集合的键
            string str2 = "defghijklmnopqrstuvwxyzabcDEFGHIJKLMNOPQRSTUVWXYZABC";  //准备添加的值
            for (int i = 0; i < str1.Length; i++)  //遍历键所在的字符串
            {
                dic.Add(str1[i], str2[i]);  //添加键和值
            }
            Console.WriteLine("请输入字符串");
            string str3 = Console.ReadLine();  //输入的字符串
            Console.WriteLine("原来是" + str3);  //源字符串
            StringBuilder sb = new StringBuilder();  //创建一个StringBuilder的对象
            for (int i = 0; i < str3.Length; i++)  //遍历输入的字符串
            {
                if (dic.ContainsKey(str3[i]))  //如果集合中包含这个字符的键
                {
                    sb.Append(dic[str3[i]]);  //sb添加对应的值
                }
                else  // 如果不包含
                {
                    sb.Append(str3[i]);  // 添加原来的值
                }
            }
            Console.WriteLine("转换后"+sb); //输出转换后的字符串
            Console.ReadKey();




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2