首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Caesar Cipher Java解密

Caesar Cipher Java解密
EN

Stack Overflow用户
提问于 2019-11-27 01:39:34
回答 2查看 2.8K关注 0票数 1

当我尝试解码加密的消息时,我遇到了问题。它可以解密几乎所有的东西,但是当我尝试解密'w x y z‘(全部小写)时,它不能正常工作。它只对大写字母进行解密。我做错什么了?

代码语言:javascript
复制
@SuppressWarnings("unused")
public static void main(String[] args) {

    String message = "ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW wxyZ XyZ XYZ YOU  xyz";

    System.out.println(message);
    String encr = encrypt(message);
    String decr = decrypt(encr);

    System.out.println(encr + "\n" + decr);

}



@SuppressWarnings("unused")
private static String encrypt(String message) {
    StringBuilder temp = new StringBuilder();

    for(int i=0; i<message.length(); i++) {
        char c = (char)(message.charAt(i) + 3);

        if(c >= 'x') {
            c = (char)(message.charAt(i) - 23);
        } else {
            c = (char)(message.charAt(i) + 3);
        }

        temp.append(c);
    }

    return temp.toString();
}



private static String decrypt(String message) {
    StringBuilder temp = new StringBuilder();

    for(int i=0; i<message.length(); i++) {
            char c = (char)(message.charAt(i) - 3);

        // HELLO WORLD
        // KHOOR ZRUOG

        if(c > 'x') {
            c = (char)(message.charAt(i) + 26);
        } else {
            c = (char)(message.charAt(i) - 3);
        }

        temp.append(c);
    }

    return temp.toString();
}

输出:

代码语言:javascript
复制
Text: ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW wxyZ XyZ XYZ YOU  xyz
Encrypted: DEFGHIJKLOPQRSTUVWX#khoor#jlrugdqr#ZRUOG#KRZ#`ab]#[b]#[\]#\RX##abc
Decrypted: ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW ]^_Z X_Z XYZ YOU  ^_`

预期输出:

代码语言:javascript
复制
Text: ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW wxyZ XyZ XYZ YOU  xyz
Encrypted: DEFGHIJKLOPQRSTUVWX#khoor#jlrugdqr#ZRUOG#KRZ#`ab]#[b]#[\]#\RX##abc
Decrypted: ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW wxyZ XyZ XYZ YOU  xyz
EN

回答 2

Stack Overflow用户

发布于 2019-11-27 01:58:01

您仅在较小情况下才会遇到问题,因为您是用加密方式编写此代码的

代码语言:javascript
复制
        if(c >= 'x') {
            c = (char)(message.charAt(i) - 23);
        } else {
            c = (char)(message.charAt(i) + 3);
        }

这个是用来解密的

代码语言:javascript
复制
        if(c > 'x') {
            c = (char)(message.charAt(i) + 26);
        } else {
            c = (char)(message.charAt(i) - 3);
        }

他们只处理小的'x‘,而对于大写的'X’,你没有写任何这样的条件。所以,如果你从你的函数中删除了上面提到的代码,它将开始工作。但这不是caesar-cipher,因此你可以从“如何循环遍历”开始寻找。

票数 1
EN

Stack Overflow用户

发布于 2021-01-23 02:24:01

经过搜索和测试,发现这才是正确的解码方式。

代码语言:javascript
复制
private static String decrypt(String message) {
        StringBuilder temp = new StringBuilder();
       //key = 4
        for(int i=0; i<message.length(); i++) {
                char  c = (char)((message.charAt(i) - 4 - 97) %26 +97);
                if(c < 'a') {
                    c = (char) (message.charAt(i) - 4 - 'a' + 'z' + 1);
                }
            temp.append(c);
        }

        return temp.toString();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59056596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档