A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张扬 中级黑马   /  2012-5-30 00:03  /  1788 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 需求:对用户输入的字符串进行加密
  3. 思路:通过异或运算进行加密
  4. 步骤:1,创建一个System标准输入流的扫描器对象
  5.           2,提示用户输入一个英文的字符串用于加密
  6.           3,通过扫描器对象的nextLine()方法获取用户输入的字符串
  7.           4, 定义个字符数组获取字符串内容
  8.           5,通过for循环遍历数组 对每个元素进行异或运算
  9.           6,输出加密后的字符串


  10. */

  11. import java.util.Scanner;

  12. class  Example
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 Scanner sc = new Scanner(System.in);
  17.                 System.out.println("请输入需要加密的英文密码");
  18.                 String password = sc.nextLine();
  19.                 System.out.println("-------------------------------");
  20.                 System.out.println("您输入的密码是:"+password);
  21.                 char[] ch = password.toCharArray();
  22.                 for (int i=0;i<ch.length ;i++ )
  23.                 {
  24.                         ch[i] =(char)(ch[i] ^ 2000);
  25.                 }
  26.                 System.out.println("加密后的密钥是:"+ (new String(ch)));

  27.         }
  28. }
复制代码


为什么加密完了全是?号    而不是各种字符?

1 个回复

倒序浏览
这里涉及到编码问题了,
要知道,字符在内存中也都是用2进制表示的,通过某个编码规则,可以对应的表示特定含义(字符)
开始输入的字符通过编码转换为对应的2进制存在内存中,
但是通过ch[i] =(char)(ch[i] ^ 2000);
这样的操作,内存中原本有意义的二进制代码已经无序无意义了,就是说找不到对应的编码转换了
于是乎以?显示
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马