我正在使用Java编写密码,但我不能做以下事情: 我想编辑一个char数组的值来加密它
我该怎么做?
我不知道改变每个字符的ASCII值可能是答案;那就是我问你们的原因!
答案 0 :(得分:8)
您可以向int
添加char
,但结果为int
- 您必须转回char
才能将其重新加入array[x] += someInt;
数组,除非您使用复合赋值运算符:
array[x] = (char) (array[x] + someInt);
或
String.getBytes(charset)
但是,通常此不是执行加密的适当方式。您通常会得到不可打印的字符,或者甚至在Unicode中没有特定含义的字符。相反,大多数加密算法都设计用于处理任意二进制数据 - 即字节数组。
通常您首先将字符串转换为字节数组(例如,使用new String(encryptedBytes)
- 明确指定编码)。然后对字节数组执行加密,为您提供一个新的字节数组。如果确实需要将其转换回文本,请使用base64执行此操作 - 不使用{{1}},因为您不再需要编码的文本数据普通文本编码。
答案 1 :(得分:2)
在Java中,char
和int
是兼容的类型,因此只需将它们与+
运算符一起添加。
char c = 'c';
int x = 10;
c + x
会生成一个整数,因此您需要显式投射将其分配给您的角色可变回。
c = (char)(c + x); // After this assignment, c = 'm'
答案 2 :(得分:0)
简单的对称旋转密码使用相同的函数进行编码以及在使用26个字母的字母表时对数据进行解码。
public class Rot13 {
public static void main(String[] args) {
String s = args[0];
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 'a' && c <= 'm') c += 13;
else if (c >= 'A' && c <= 'M') c += 13;
else if (c >= 'n' && c <= 'z') c -= 13;
else if (c >= 'N' && c <= 'Z') c -= 13;
System.out.print(c);
}
System.out.println();
}
}
来源here。
在上面的示例中,不需要转换为char
,因为“add and assign”运算符将结果存储在初始容器(char c
)中,这是一个char。 / p>
答案 3 :(得分:0)
将带有char和typecast的int value
添加回char,如下所示:
char a = 'a';
char b = (char)(a+5);
System.out.println(b); //<-prints "f"
在char数组中,
charArray[index] = (char)(charArray[index] + intValue);
答案 4 :(得分:0)
public class IntPos {
static int dim = 4;
public static String[][] main(){
String[][] p = new String[dim][dim];
char letter = 'A';
for(int i = 0; i < dim;i++){
for(int j = 0; j<dim;j++){
char newLetter =(char)(letter + i);
p[i][j] = Character.toString(newLetter)+j;
System.out.println(p[i][j]);
}
}
return p;
}
}