加密编写一个加密的Java程序。具有整数键的txt文件
这是我关于StackOverflow的第一个问题。希望它足够清晰和详细
所以我需要写两个方法,加密和解密。 我的加密功能是:
public void cifra() throws FileNotFoundException,IOException {
FileInputStream in=new FileInputStream(file);
String s="";
int b;
while(in.read()!=-1) {
b=in.read()+key;
s+=b;
}
in.close();
PrintStream ps=new PrintStream(file);
ps.println(s);
ps.close();
}
我的解密函数是相同的,但与
b=in.read()-key;
但它不起作用。输出文件与未加密的初始文件不同。 谢谢你的帮助
# 1 楼答案
将while函数更改为:
当前您读取了两次,第一次在while条件中,第二次在循环中,因此跳过了1个字符
# 2 楼答案
您正在读取字节(每个字节都转换为整数)
但是
String
不是字节数组,而是包含Unicode文本,可以组合希腊语、汉语和其他任何语言。(事实上String
使用char
,其中每个字符都是两个byte
。)对于具有某些字符集编码的外部字节,需要进行转换。这将出错,占用更多内存,速度较慢。因此,这里通常不使用字符串另一个问题是字节的范围为0-255(或有符号字节-128-127)。 因此,我的
%
,模。我们也可以看到& 0xFF
(按位和255,0b1111_1111)请注意
println(someInt)
会将文本表示写入一个整数,“a”即int 65将被存储为“65”-2个字节:56和55# 3 楼答案
在。read()以整数形式读取文件的单个字节。然后通过s+=b将该整数转换为字符串
所以说吧。read()为您提供97(ASCII表示“a”),您的密钥为5,您正在转过身,将102逐字写入文件,而不是“f”,它将是“编码”字符
循环应该构建一个字节数组(或字节流),并且应该将该字节数组写入文件
下面是ByteArrayOutputStream的文档,循环应该将其写入,然后可以将其写入文件