Java 使用凯撒密码进行大数加密

Java 使用凯撒密码进行大数加密,java,encryption,Java,Encryption,现在我有一个凯撒密码的以下代码,但是当我尝试用一个非常大的数字加密文本时遇到了一个问题。 例如1000 static String encrypt(String plaintext) { StringBuilder ciphertext = new StringBuilder(plaintext); for (int i = 0; i < ciphertext.length(); i++) { ciphertext.setCharAt(i, encrypt(

现在我有一个凯撒密码的以下代码,但是当我尝试用一个非常大的数字加密文本时遇到了一个问题。 例如1000

static String encrypt(String plaintext) {
    StringBuilder ciphertext = new StringBuilder(plaintext);
    for (int i = 0; i < ciphertext.length(); i++) {
        ciphertext.setCharAt(i, encrypt(ciphertext.charAt(i)));
    }
    return ciphertext.toString();
}

static String decrypt(String plaintext) {
    StringBuilder ciphertext = new StringBuilder(plaintext);
    for (int i = 0; i < ciphertext.length(); i++) {
        ciphertext.setCharAt(i, decrypt(ciphertext.charAt(i)));
    }
    return ciphertext.toString();
}

static char encrypt(char c) {
    return (char) ('!' + (c - '!' + 1000) % ('~' - '!' + 1));
}

static char decrypt(char c) {
    return (char) ('!' + (c - '!' - 1000) % ('~' - '!' + 1));
}
静态字符串加密(字符串明文){
StringBuilder密文=新的StringBuilder(纯文本);
for(int i=0;i
假设我在加密中输入“abc123”,使用1000作为密钥,我得到一堆未知字符。请记住,我不希望它只是在a-z之间循环,而是使用ASCII码使用符号


任何帮助都会很好

在Java中,模的结果与被除数的符号相同。所以当你计算
c-“!”-1000
您将得到一个负值,在模运算之后仍然是负值。当您添加“!”时,您将计算出小于“!”的值,对于一个字符,它将是不可见的或下溢的

static char decrypt(char c) {
    char d = '~' - '!' + 1;
    int x = (c - '!' - 1000) % d;
    if (x < 0) x += d;
    return (char)('!' + x);
}
静态字符解密(字符c){
字符d='~'-'!'+1;
int x=(c-“!”-1000)%d;
如果(x<0)x+=d;
返回字符(“!”+x);
}
下面是对您遇到的问题的讨论


链接到我正在使用的ASCII表:因为您只想映射可见的ASCII字符,126-33+1=94个可能的值。任何高于93的键都会有一个相应的较小的键,用于执行相同的操作。95将加密与1相同的内容,0将加密与94相同的内容,因此不需要像1000这样的大值。@因此,即使我使用93代替1000,我仍然会得到未知字符或不可见字符。非常感谢!顺便说一下,x需要是int,return语句需要转换为char。但是效果很好,再次感谢!接得好,请点击支票结束问题。