我正在研究使用随机数生成器通过暴力方式找到消息的加密密钥。每次尝试时都会收到错误消息

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

我有两条消息:一条加密消息和一条解密消息。我使用随机数生成器来查找加密密钥。我将消息放入 TreeMap 中,并将加密消息放入 value(value = key + cryptoKey) 中。 bruteForceKeyDecoding 应该给我使用的密钥。

每次尝试此操作时,我都会收到一条错误消息:

Exception in thread "main" java.lang.ClassCastException: class java.lang.Character cannot be cast to class java.lang.Integer (java.lang.Character and java.lang.Integer are in module java.base of loader 'bootstrap')
    at java.base/java.lang.Integer.compareTo(Integer.java:72)
    at java.base/java.util.TreeMap.getEntry(TreeMap.java:350)
    at java.base/java.util.TreeMap.get(TreeMap.java:279)
    at EncryptionDecryption.bruteForceKeyDecoding(EncryptionDecryption.java:85)
    at Main.main(Main.java:12)
public static int generateNewKey() {
        Random rand = new Random();
        int rand_int1 = rand.nextInt(30);
        return rand_int1;
}
public static int bruteForceKeyDecoding(String messageToDecode, String message) {
        
        Map<Character, Character> encryptedText = new TreeMap<>()
        StringBuilder sb = new StringBuilder();
        int encryptionKey = 12;

        for (int i = 0; i < message.length(); i++) {
            encryptedText.put(message.charAt(i), (char) (message.charAt(i) + encryptionKey));
        }

        int realKey = 0;
        while(messageToDecode != message) {
            int randomKey = generateNewKey();
            for(int i = 0; i < message.length(); i++) {
                encryptedText.put((char) key, (char) (encryptedText.get(key)-randomKey));
                sb.append(encryptedText.get(key));
            }
            messageToDecode = sb.toString();
            realKey = randomKey;
        }
        return realKey;
}
java encryption character treemap
1个回答
0
投票

我的整个代码如下所示:

import java.util.Map;
import java.util.Random;
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 (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;
    }

    public static int bruteForceKeyDecoding(String messageToDecode, String message) {

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < message.length(); i++) {
            encryptedText.put(message.charAt(i), (char) (message.charAt(i) + key));
        }

        int realKey = 0;
        while(messageToDecode != message) {
            int randomKey = generateNewKey();
            for(int i = 0; i < message.length(); i++) {
                encryptedText.put((char) key, (char) (encryptedText.get(key)-randomKey));
                sb.append(encryptedText.get(key));
            }
            messageToDecode = sb.toString();
            realKey = randomKey;
        }
        return realKey;
    }

    public static int generateNewKey() {
        Random rand = new Random();
        int rand_int1 = rand.nextInt(30);
        return rand_int1;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.