问题描述
public static String EncodeString() {
String plaintext = "Hello Jon";
String alphabet = "abcdefghijklmnopqrstuvwxyz";
String Substituion = "zyxwvutsrqponmlkjihgfedcba";
for(int i=0; i<plaintext.length(); i++){
for(int j=0; j<alphabet.length(); j++){
if(plaintext[i]==alphabet[j]) {
//not sure what to do here because the code above is giving an error
}
}
}
例如“abcdefghijklmnopqrstuvwxyz”是普通字母,混杂字母是“zyxwutsrqponmlkjihgfedcba”,字符串消息是“Hi Jon”。所以消息应该按照乱码加密,但是字母可以由用户输入,这意味着每次都会不同。
我知道我可以使用数组、for 循环或哈希图,但哪个最有效?
以上是我目前正在尝试的代码,但我有点卡住了,我知道我做错了什么但不确定是什么。它也应该返回一个加密的纯文本但加密的字符串,我还没有添加。
解决方法
您的代码出现错误,因为您试图将 plaintext
和 alpabet
用作数组,但它们不是数组。所以 plaintext[int]
不能工作。相反,我会使用 String.charAt(int)
。这允许您在不使用数组的情况下检查两个 字符 是否相等。我认为,通过用户可以更改混乱的字母表,这更容易。代码将是:
public static String EncodeString() {
String plaintext = "Hello Jon";
String alphabet = "abcdefghijklmnopqrstuvwxyz "; //space added
String substitution = "zyxwvutsrqponmlkjihgfedcba ";
String encrypted_message = "";
for(int i=0; i<plaintext.length(); i++){
for(int j=0; j<alphabet.length(); j++){
if(plaintext.charAt(i)==alphabet.charAt(j)) {
encrypted_message += Substitution.charAt(j); //This adds the right character of the jumbled aplhabet to the encrypted message
}
}
}
return encrypted_message; //returns the encrypted message
}
现在,您应该知道该程序仅适用于从 a 到 z 的小写字母和空格。为避免这种情况,您可以将所有大写字符添加到两个字母表中,或使用 .toLowerCase()
。
这里没有必要重新发明轮子。只需使用 java.util.Base64 类。虽然不是过于安全,但它在安全性方面仍然比您尝试使用的要好得多,而且......更容易编码和使用:
public class MyClass {
public static void main(String[] args) {
String message = "\nWhat is your name?\nYour Address?\nYour Phone Number?";
System.out.println("Original Message: --> " + message);
String encodedMessage = encode(message);
System.out.println("Encoded Message: --> " + encodedMessage);
System.out.println("Decoded Message: --> " + decode(encodedMessage));
}
public static String encode(String inputString) {
// Getting MIME encoder
java.util.Base64.Encoder encoder = java.util.Base64.getMimeEncoder();
// Encode supplied String and return.
return encoder.encodeToString(inputString.getBytes());
}
public static String decode(String encodedString) {
// Getting MIME Decoder
java.util.Base64.Decoder decoder = java.util.Base64.getMimeDecoder();
// Decode supplied Encoded String and return.
return new String(decoder.decode(encodedString));
}
}
控制台输出将是:
Original Message: -->
What is your name?
Your Address?
Your Phone Number?
Encoded Message: --> CldoYXQgaXMgeW91ciBuYW1lPwpZb3VyIEFkZHJlc3M/CllvdXIgUGhvbmUgTnVtYmVyPw==
Decoded Message: -->
What is your name?
Your Address?
Your Phone Number?