加密Android(Java)中的文本

时间:2011-12-12 11:10:03

标签: java android

请帮我纠正代码。该字符串未加密。

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;    
}

2 个答案:

答案 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();
}

两个旁注:

  1. 我希望你不是在担心安全问题的地方做这件事吗?因为凯撒密码很久以前就被打破了;另外,使用固定密钥与安全密钥相反。 相反,请考虑使用当前被认为是安全的现有算法(如AES)。

  2. 您的代码格式化很容易误解代码实际执行的操作;因为没有括号,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);
}