请帮我纠正代码。该字符串未加密。
private static String Encrypt(String val)
{
int len = val.length();
int[] k = new int[len];
for (int n = 0; n < (len-1); n++)
k[n] += 5;
val = k.toString();
return val;
}
答案 0 :(得分:2)
您正在为自己未初始化的数组添加5,这意味着它包含全部零。
我猜你是在尝试实施Caesar cipher?为此,原始字符串应该出现在某个地方。此外,您无法更改String的值。此外,您应该考虑在255处回绕,以免超出有效字符范围(0..255)
您的功能的工作版本可以是看起来像这样:
private static String Encrypt(String val) {
StringBuffer sb;
for (int n = 0; n < val.length(); n++) {
sb.Append((char)((val.charAt(n) + 5) % 255));
}
sb.toString();
}
两个旁注:
我希望你不是在担心安全问题的地方做这件事吗?因为凯撒密码很久以前就被打破了;另外,使用固定密钥与安全密钥相反。 相反,请考虑使用当前被认为是安全的现有算法(如AES)。
您的代码格式化很容易误解代码实际执行的操作;因为没有括号,for循环只会实际重复一行k[n] = ...
,但你的缩进建议不然......
答案 1 :(得分:0)
您使用的是未初始化的数组。您应该使用来自输入char
的{{1}}值。
您还要将String
转换为int[]
错误。它应该是这样的:
String
示例运行:
private static String Encrypt(String val) {
int len = val.length();
char[] k = new char[len];
for (int n = 0; n < len; n++) {
k[n] = (char)(val.charAt(n) + 5);
}
return new String(k);
}