我正在制作一个加密程序,对用户输入的单词进行加密,除了输出输入的加密单词之外,我一切正常。这是我的代码现在的样子:
1 级
public class Encryption {
String encrypt = "test";
String key;
String message;
String alpha;
Encryption(){
encrypt = Encrypt();
}
private String Encrypt(){
String[] alphabet = {
"a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" ,
"n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z"
};
StringBuilder sbAlphabet = new StringBuilder();
for (int i = 0; i <= 25; i++) {
sbAlphabet.append(alphabet[i]);
}
alpha = sbAlphabet.toString();
return encrypt;
}
}
2级
package encryption;
import java.util.Random;
public class Key {
String key;
Key() {
key = genKey();
}
private String genKey() {
String[] scrambled = {
"a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" ,
"n" , "o" , "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z"
};
int r;
String temp;
String key;
StringBuilder sbScrambled = new StringBuilder();
for (int i = 0; i <= 25; i++) {
r = (int)(25*Math.random() + 1);
temp = scrambled[i];
scrambled[i] = scrambled[r];
scrambled[r] = temp;
}
for (int i = 0; i <= 25; i++) {
sbScrambled.append(scrambled[i]);
}
key = sbScrambled.toString();
return key;
}
}
3级
package encryption;
import java.util.Scanner;
public class Message {
Key key = new Key();
Encryption encrypt;
String message;
Message() {
System.out.println("Please enter an input:");
Scanner user_input = new Scanner( System.in);
message = user_input.next();
encrypt = new Encryption();
}
public static void main(String[] args) {
Message message = new Message();
System.out.println(message.key.key);
System.out.println(message.encrypt.alpha);
}
}
Encryption类返回字母表,Key类随机加密字母表然后显示,Message类向用户显示加密后的 key 和字母表。下面是运行它时的示例:
Please enter an input:
wew lad
mbptwuklhanjrsedzqfcyvxogi
abcdefghijklmnopqrstuvwxyz
我试图让代码做的是以加密字母显示用户输入,所以它看起来像这样:
Please enter an input:
wew lad
xwx jmt
mbptwuklhanjrsedzqfcyvxogi
abcdefghijklmnopqrstuvwxyz
最佳答案
回答您的问题:
您需要将 Message()
内部的消息
传递到加密类中,然后从那里循环遍历所有字符并替换消息
字符及其在乱序字母表中的等效字符。例如,您可以将字符 A
替换为 scrambled[0]
。
为此,您需要查看 ASCII Table查看它的数字表示。然后做类似的事情:
public String encryptText(String message) {
message = message.toLowerCase();
String encryptedMessage = "";
for(int i = 0; i < message.length; i++) {
encryptedText += scrambled[message[i] - 'a' + 1];
}
return encryptedMessage;
}
<小时/>
话虽如此,我强烈建议删除您刚刚完成的所有内容。当谈到加密时,除非您真的知道自己在做什么,否则您不应该尝试创建自己的协议(protocol),因为对于任何有能力加密的人来说破解它都是非常容易的。
这是您应该做什么的简单示例,https://stackoverflow.com/a/4487541/1327636
你正在做的是一个替代密码,破解起来并不是很难。破解替换密码的方法是:
计算加密文本中字母的频率并将其与 letter frequency table 进行比较
寻找重复字符,例如。
ZZ
查看单词长度,并将加密字符串字符与频率表进行比较,找到流行单词,例如
The
寻找重复模式,例如
ING
、TH
、ION
仅使用这四件事就可以为您提供破解替换密码的非常好的统计概率。如果您想了解更多有关它们的信息,我会查看 here.
关于java - 加密用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066953/