展开全部
我在你的另外一个同样的问题里62616964757a686964616fe59b9ee7ad9431333337616535面已经回答你了,再次复制代码给你import java.io.*;
// 看了下,该程序想实现用密码password对数据data进行加密,变量名字取得比较乱,所以修改了部分变量名字
public class TestString {
// 定义的shuju数据 和 password密码,可以放到前面
static String data = "6869";
static String password = "xzfd";
public static void main(String[] args) throws Exception {
char s[] = data.toCharArray();
char p[] = password.toCharArray();
int n = s.length;
int m = p.length;
StringBuilder ecodeDataTemp = new StringBuilder();// 建议重新定义一个变量用于存储加密后的字符
// 你的代码str = new String(s); 又把最开始的str变量给覆盖掉了..
for (int k = 0; k
int temp = s[k] + p[k % m];// 加密的过程
s[k] = (char) temp;
// 把每一个加密后的字符都变成一个uncoide编码进行存储,比如\\ua9,
// 这样的好处,就算是该字符没有可以显示出来的字符,也可以存进去.比如很多的char的值可显示的字符,那么也不怕.
// 你的代码强行把字符存进去,那么如果该字符不存在等情况,可能就会显示出 ?
ecodeDataTemp.append("\\u" + Integer.toHexString(temp));
}
String ecodeData = new String(ecodeDataTemp);
//System.out.println("输出加密的数据到文件:" + ecodeData);
File file = new File("Tesat.txt");
FileWriter fw = new FileWriter(file);
fw.write(ecodeData);
fw.flush();
fw.close();
FileReader fr = new FileReader(file);
String readData = "";
int b;
while ((b = fr.read()) != -1) {
readData = readData + (char) b;
}
fr.close();
//System.out.println("从文件里读取到的数据:"+readData);
StringBuilder decodeDataTemp = new StringBuilder();
String[] hex = readData.split("\\\\u");// 切割字符成单独的unicode字符
for (int i = 1; i
int temp = Integer.parseInt(hex[i], 16);
decodeDataTemp.append(((char) temp));
}
char[] es = decodeDataTemp.toString().toCharArray();
for (int k = 0; k
int temp = es[k] - p[k % m];
es[k] = (char) temp;
}
String decodeData = new String(es);
System.out.println("加密前的数据data : " + data);
System.out.println("加密后的数据data : " + ecodeData);
System.out.println("如果强制解密data : "+decodeDataTemp);
System.out.println("解密后的数据data : " + decodeData);
}
}
数据输出如下加密前的数据data : 6869
加密后的数据data : \uae\ub2\u9c\u9d
如果强制解密data : ????
解密后的数据data : 6869