我正在用 Java 制作一个密码,但我不能做以下事情:我想编辑一个 char 数组的值来加密它
我该怎么做?
改变每个 char 的 ASCII 值可能是答案,我不知道;这就是我问你们的原因!
我正在用 Java 制作一个密码,但我不能做以下事情:我想编辑一个 char 数组的值来加密它
我该怎么做?
改变每个 char 的 ASCII 值可能是答案,我不知道;这就是我问你们的原因!
您可以将 an 添加int
到 a char
,但结果是int
- 您必须转换回 tochar
才能将其放回数组中,除非您使用复合赋值运算符:
array[x] += someInt;
或者
array[x] = (char) (array[x] + someInt);
但是,通常这不是执行加密的适当方式。您通常会得到不可打印的字符,或者在 Unicode 中甚至没有特定含义的字符。相反,大多数加密算法设计用于处理任意二进制数据——即字节数组。
通常你会先将字符串转换为字节数组(例如,使用String.getBytes(charset)
- 明确指定编码)。然后对字节数组进行加密,给你一个新的字节数组。如果您确实需要将其转换回文本,请使用 base64 来执行此操作 - 不要使用,new String(encryptedBytes)
因为您不再拥有以普通文本编码方式编码的文本数据。
在 Java 中,char
并且int
是兼容的类型,因此只需使用+
运算符添加它们。
char c = 'c';
int x = 10;
c + x
结果是一个整数,因此您需要显式转换以将其分配给您的字符变量。
c = (char)(c + x); // After this assignment, c = 'm'
当使用 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();
}
}
来源在这里。
在上面的示例中,不需要强制转换为,char
因为“添加和分配”运算符将结果存储在初始容器 ( char c
) 中,该容器是一个字符。
将带有 char的 int 添加value
回 char ,如下所示:
char a = 'a';
char b = (char)(a+5);
System.out.println(b); //<-prints "f"
在 char 数组中,
charArray[index] = (char)(charArray[index] + intValue);
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;
}
}