3

我正在用 Java 制作一个密码,但我不能做以下事情:我想编辑一个 char 数组的值来加密它

我该怎么做?

改变每个 char 的 ASCII 值可能是答案,我不知道;这就是我问你们的原因!

4

5 回答 5

11

您可以将 an 添加int到 a char,但结果是int- 您必须转换回 tochar才能将其放回数组中,除非您使用复合赋值运算符:

array[x] += someInt;

或者

array[x] = (char) (array[x] + someInt);

但是,通常这不是执行加密的适当方式。您通常会得到不可打印的字符,或者在 Unicode 中甚至没有特定含义的字符。相反,大多数加密算法设计用于处理任意二进制数据——即字节数组。

通常你会先将字符串转换为字节数组(例如,使用String.getBytes(charset)- 明确指定编码)。然后对字节数组进行加密,给你一个新的字节数组。如果您确实需要将其转换回文本,请使用 base64 来执行此操作 - 不要使用new String(encryptedBytes)因为您不再拥有以普通文本编码方式编码的文本数据。

于 2012-11-29T16:35:50.017 回答
5

在 Java 中,char并且int是兼容的类型,因此只需使用+运算符添加它们。

char c = 'c';
int x = 10;

c + x结果是一个整数,因此您需要显式转换以将其分配给您的字符变量。

c = (char)(c + x); // After this assignment, c = 'm'
于 2012-11-29T16:34:22.277 回答
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();
    }
}

来源在这里

在上面的示例中,不需要强制转换为,char因为“添加和分配”运算符将结果存储在初始容器 ( char c) 中,该容器是一个字符。

于 2012-11-29T16:35:05.727 回答
0

将带有 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);
于 2012-11-29T16:36:28.583 回答
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;  
    }
    
      
     
}

于 2020-02-05T00:28:50.760 回答