我想创建一条消息,能够使用密钥对其进行编码并使用两个函数对其进行解码:编码和解码。我不明白为什么它不起作用。
我尝试用数字键改变我的角色。我将字符放入 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;
}
}
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;
}
}
顺便说一句:您应该学习如何调试代码,这在这种情况下非常有帮助。