我正在尝试为我的作业创建一个简单的 Cypher 程序,但它不起作用

问题描述 投票:0回答:1

我想创建一条消息,能够使用密钥对其进行编码并使用两个函数对其进行解码:编码和解码。我不明白为什么它不起作用。

我尝试用数字键改变我的角色。我将字符放入 TreeMAp 中,使其保持有序。我尝试使用 1 个 TreeMap,但它不起作用,因此我决定最终创建 2 个 Treemap,其中我使用一个字符作为键,使用加密消息作为值,第一个使用一个字符作为键,使用加密消息作为值,反之亦然,将解密消息作为 TreeMap。如果密钥对应于加密消息的字符,解密方法应该给我解密的 TreeMAp 的值。

public class Main {
    public static void main(String[] args) {
        String message = "I love Java";
        String encodedMessage = EncryptionDecryption.encrypton(message);
        String decodedMessage = EncryptionDecryption.decryption(encodedMessage);
        System.out.println(message);
        System.out.println(encodedMessage);
        System.out.println(decodedMessage);
    }
}
import java.util.Map;
import java.util.TreeMap;

public class EncryptionDecryption {
    private static int key = 12;
    private static Map <Character, Character> encryptedText = new TreeMap<>();
    private static Map <Character, Character> decryptedText = new TreeMap<>();

    public static String encrypton(String messageToEncode) {
        for(int i = 0; i < messageToEncode.length(); i++) {
            
            encryptedText.put(messageToEncode.charAt(i), (char) (messageToEncode.charAt(i) + key));
            decryptedText.put((char) (messageToEncode.charAt(i) + key), messageToEncode.charAt(i));
        }

        StringBuilder sb =  new StringBuilder();
        for(Map.Entry<Character, Character> x : encryptedText.entrySet()) {
            sb.append(x.getValue());
        }
        String encryptedMessage = sb.toString();
        return encryptedMessage;
    }

    public static String decryption(String messageToDecode) {
        StringBuilder sb =  new StringBuilder();

        for(Map.Entry<Character, Character> x : decryptedText.entrySet()) {
            for (int i = 0; i < messageToDecode.length(); i++) {
                if (messageToDecode.charAt(i) == x.getKey()) {
                    sb.append(x.getValue());
                }
            }
        }

        String decryptedMessage = sb.toString();
        return decryptedMessage;
    }
}

java encryption character treemap
1个回答
0
投票

TreeMap
按字母顺序对条目进行排序(第一个大写字母高于小写字母。这就是为什么你会得到意想不到的结果。

返回的加密消息是您也得到的IJaelov的加密。

迭代字符串将会帮助你:

public class EncryptionDecryption {
    private static int key = 12;
    private static Map<Character, Character> encryptedText = new TreeMap<>();
    private static Map <Character, Character> decryptedText = new TreeMap<>();

    public static String encrypton(String messageToEncode) {
        for(int i = 0; i < messageToEncode.length(); i++) {

            encryptedText.put(messageToEncode.charAt(i), (char) (messageToEncode.charAt(i) + key));
            decryptedText.put((char) (messageToEncode.charAt(i) + key), messageToEncode.charAt(i));
        }

        StringBuilder sb =  new StringBuilder();
        for(int j = 0; j<messageToEncode.length();j++) {
            sb.append(encryptedText.get(messageToEncode.charAt(j)));
        }
        String encryptedMessage = sb.toString();
        return encryptedMessage;
    }

    public static String decryption(String messageToDecode) {
        StringBuilder sb =  new StringBuilder();

        for (int i = 0; i < messageToDecode.length(); i++) {
                sb.append(decryptedText.get(messageToDecode.charAt(i)));
        }

        String decryptedMessage = sb.toString();
        return decryptedMessage;
    }

}

顺便说一句:您应该学习如何调试代码,这在这种情况下非常有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.