我正在使用Java制作密码,但我无法完成以下操作:我想编辑char数组的值以进行加密。
我应该如何做呢?
改变每个char的ASCII值可能是答案,但我不确定;这就是为什么我要问你们!
我应该如何做呢?
改变每个char的ASCII值可能是答案,但我不确定;这就是为什么我要问你们!
你可以将一个int
加到一个char
上,但结果会变为一个int
- 除非你使用复合赋值运算符,否则你需要将其强制转换回char
才能将其放回数组中:
array[x] += someInt;
或者array[x] = (char) (array[x] + someInt);
然而,通常这不是执行加密的适当方式。你通常会得到无法打印的字符,或者在 Unicode 中甚至没有特定含义的字符。相反,大多数加密算法都是设计用于处理任意二进制数据 - 即字节数组。
通常,您需要先将字符串转换为字节数组(例如使用 String.getBytes(charset)
- 一定要指定编码)。然后对字节数组执行加密,得到一个新的字节数组。如果你真的需要将它转换回文本,请使用 base64 进行转换 - 不要使用 new String(encryptedBytes)
,因为你不再拥有以正常文本编码方式编码的文本数据。
char
和 int
是兼容类型,因此可以使用+
运算符直接将它们相加。char c = 'c';
int x = 10;
c + x
的结果是一个整数,因此您需要进行 显式转换 将其赋值回您的字符变量中。
c = (char)(c + x); // After this assignment, c = 'm'
char[]
数组... - Jon Skeet简单对称旋转密码在使用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 c
)中,该容器是一个字符,因此不需要进行char
类型转换。
将 int 类型的 value
与 char 类型相加,并按照以下方式进行类型转换:
char a = 'a';
char b = (char)(a+5);
System.out.println(b); //<-prints "f"
在字符数组中,
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;
}
}