黑马程序员技术交流社区
标题:
运算代码问题
[打印本页]
作者:
黑马张扬
时间:
2012-5-30 00:03
标题:
运算代码问题
/*
需求:对用户输入的字符串进行加密
思路:通过异或运算进行加密
步骤:1,创建一个System标准输入流的扫描器对象
2,提示用户输入一个英文的字符串用于加密
3,通过扫描器对象的nextLine()方法获取用户输入的字符串
4, 定义个字符数组获取字符串内容
5,通过for循环遍历数组 对每个元素进行异或运算
6,输出加密后的字符串
*/
import java.util.Scanner;
class Example
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要加密的英文密码");
String password = sc.nextLine();
System.out.println("-------------------------------");
System.out.println("您输入的密码是:"+password);
char[] ch = password.toCharArray();
for (int i=0;i<ch.length ;i++ )
{
ch[i] =(char)(ch[i] ^ 2000);
}
System.out.println("加密后的密钥是:"+ (new String(ch)));
}
}
复制代码
未命名.jpg
(15.29 KB, 下载次数: 245)
下载附件
2012-5-30 00:01 上传
为什么加密完了全是?号 而不是各种字符?
作者:
张亭
时间:
2012-5-30 08:34
这里涉及到编码问题了,
要知道,字符在内存中也都是用2进制表示的,通过某个编码规则,可以对应的表示特定含义(字符)
开始输入的字符通过编码转换为对应的2进制存在内存中,
但是通过ch[i] =(char)(ch[i] ^ 2000);
这样的操作,内存中原本有意义的二进制代码已经无序无意义了,就是说找不到对应的编码转换了
于是乎以?显示
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2