我有两条消息:一条加密消息和一条解密消息。我使用随机数生成器来查找加密密钥。我将消息放入 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;
}
我的整个代码如下所示:
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;
}
}