首页上一页 1 下一页尾页 7 条记录 1/1页
java入门经典 第11章习题1,字符简单加密
发表在Java图书答疑
2014-11-24
是否精华
是
否
版块置顶:
是
否
设置时间:
非永久
永久
起始时间:
结束时间:
是否扣分:
是
否
每个字符x与值y异或可加密,再与y进行异或可解密,但是y的取值好像是有范围的,当我y=10000,可以进行字母的加密及正确解密,但是汉字却不行,当y=20000,,可以进行汉字的加密,却不能进行英文字母的,这个y值的取值范围究竟是怎么样的?
期待您的回复!
期待您的回复!
精彩评论 7
2014-11-26
4L
我是自己写的程序,那您帮我看看这段程序的问题吧。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.Scanner;
//使用异或
public class Test1 {
public static void main(String[] args){
String saveFile = "Source.txt";
String origin = null;
String encryp = null;
try{
Scanner in = new Scanner(System.in);
String message = in.nextLine();
File sFile = new File(saveFile);
FileWriter ow = new FileWriter(sFile);
char[] cc = message.toCharArray();
encryption(cc);
ow.write(cc);
ow.close();
FileReader fr = new FileReader(sFile);
char[] mesg = new char[message.length()];
int rs = 0;
while((rs = fr.read(mesg)) >0 ){
encryp = new String(mesg);
System.out.println("加密后");
System.out.println(encryp);
}
PrintWriter fw = new PrintWriter(System.out);
char[] demesg = decryption(encryp.toCharArray());
System.out.println("明文:");
fw.write(demesg);
fw.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static char[] encryption(char[] cc){
for(int i = 0;i< cc.length;i++){
cc[i] = (char) (cc[i]^10000);
}
return cc;
}
public static char[] decryption(char[] cc){
for(int i = 0;i< cc.length;i++){
cc[i] = (char) ((cc[i]^10000));
}
return cc;
}
}
在异或的10000哪里,如果改到20000就没法加密与解密字母了。。。如果大于50000,就没法解密汉字,,但是20000到40000多是可以解密汉字的,这是为什么?
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.util.Scanner;
//使用异或
public class Test1 {
public static void main(String[] args){
String saveFile = "Source.txt";
String origin = null;
String encryp = null;
try{
Scanner in = new Scanner(System.in);
String message = in.nextLine();
File sFile = new File(saveFile);
FileWriter ow = new FileWriter(sFile);
char[] cc = message.toCharArray();
encryption(cc);
ow.write(cc);
ow.close();
FileReader fr = new FileReader(sFile);
char[] mesg = new char[message.length()];
int rs = 0;
while((rs = fr.read(mesg)) >0 ){
encryp = new String(mesg);
System.out.println("加密后");
System.out.println(encryp);
}
PrintWriter fw = new PrintWriter(System.out);
char[] demesg = decryption(encryp.toCharArray());
System.out.println("明文:");
fw.write(demesg);
fw.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static char[] encryption(char[] cc){
for(int i = 0;i< cc.length;i++){
cc[i] = (char) (cc[i]^10000);
}
return cc;
}
public static char[] decryption(char[] cc){
for(int i = 0;i< cc.length;i++){
cc[i] = (char) ((cc[i]^10000));
}
return cc;
}
}
在异或的10000哪里,如果改到20000就没法加密与解密字母了。。。如果大于50000,就没法解密汉字,,但是20000到40000多是可以解密汉字的,这是为什么?