如何在Java中将整数添加到字符中?

5
我正在使用Java制作密码,但我无法完成以下操作:我想编辑char数组的值以进行加密。
我应该如何做呢?
改变每个char的ASCII值可能是答案,但我不确定;这就是为什么我要问你们!

1
你能描述一下你想用这个密码做什么吗?如果你要给数组中的每个字符都加上相同的整数,那么这大致上就像是一个ROT类型的密码,安全性不高。 - Bruno
非常感谢,我已经尝试了这两个方法,但出于某些原因它们都没有起作用。谢谢,你真的很快。 - Stone
您的 PIN 码是加密密钥吗?有多少个字符?像四位数字这样的密码非常容易被破解。 - Bruno
有足够的内容(你和你的朋友之间的消息),任何简单的替换密码都可以被破解。你所要做的就是遵循消息中字母出现的统计数据,并将其与你使用的语言的统计数据进行比较。 - Mihai Stancu
@MihaiStancu 希望 OP 没有写一本随机字符的书,但如果他想将其用作一次性密码本,那么这正是他必须写的。使用一本书几乎和使用一个短的随机密钥一样弱。 - Marko Topolnik
显示剩余4条评论
5个回答

12

你可以将一个int加到一个char上,但结果会变为一个int - 除非你使用复合赋值运算符,否则你需要将其强制转换回char才能将其放回数组中:

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

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

通常,您需要先将字符串转换为字节数组(例如使用 String.getBytes(charset) - 一定要指定编码)。然后对字节数组执行加密,得到一个新的字节数组。如果你真的需要将它转换回文本,请使用 base64 进行转换 - 不要使用 new String(encryptedBytes),因为你不再拥有以正常文本编码方式编码的文本数据。


如果他正在处理像凯撒密码或维吉尼亚密码这样的简单移位密码,我怀疑他是从这些密码开始入手的,那么他将一个整数加到字符上的方法完全是适当的,不是吗?显然,对于更复杂的加密,这种方法就不再适用了。 - Jon Taylor
@JonTaylor 他应该将它保持在可打印的范围内,这样他就可以轻松地解释结果。 - SephB

5
在Java中,charint 是兼容类型,因此可以使用+运算符直接将它们相加。
char c = 'c';
int x = 10;

c + x 的结果是一个整数,因此您需要进行 显式转换 将其赋值回您的字符变量中。

c = (char)(c + x); // After this assignment, c = 'm'

1
除非进行强制类型转换,否则您将无法将值重新分配回char[]数组... - Jon Skeet

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 c)中,该容器是一个字符,因此不需要进行char类型转换。


0

将 int 类型的 value 与 char 类型相加,并按照以下方式进行类型转换:

  char a = 'a';
  char b = (char)(a+5);
  System.out.println(b);  //<-prints "f"

在字符数组中,

     charArray[index] = (char)(charArray[index] + intValue);

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接