那么我在解密块中写什么?有任何想法吗?我必须制作一个程序来加密用户输入的任何内容并对其进行解密。这种语法是一个垫脚石,我将在稍后添加扫描仪和系统输入。我只是想在我的print语句中使用它们时确保方法有效。
public class KeysLocks {
public static void main(String[] args) {
String message = "super saiyan";
System.out.println("message: " + message);
String encryption = encrypt(message);
System.out.println("encryption: " + encryption);
String decryption = decrypt(message);
System.out.println("decryption: " + decryption);
}
private static String encrypt(String message) {
String key = "abcdefghijklmnopqrstuwxyz";
String lock = "qwertyuiopasdfghjklzxcvbnm";
String encrypted_sentence = "";
char phrase[] = message.toCharArray();
for(int i = 0; i < phrase.length; i++){
int geasse = key.indexOf(phrase[i]);
encrypted_sentence += lock.charAt(geasse);
}
return encrypted_sentence;
}
private static String decrypt(String message) {
// TODO Auto-generated method stub
return null;
}
}
答案 0 :(得分:3)
我要做的假设
您所写的内容实际上称为s-box
。这是一个用另一个字母替换字母的替换框,旨在模糊明文和密文之间的关系。您的s-box
看起来像这样:
SBOX = {q,w,e,r,t,y...m}
并且您将输入的文本映射到字符输入,因此要使其解密,您需要执行相同的操作,但反过来。
SBOX^-1 = "Something"
现在我们需要弄清楚如何反转映射,所以让我们从头开始。如果我使用a
加密s-box
,它会给我q
。因此,在您的解密s-box
中,q
应该映射到a
,最好的方法是将a
置于q
位置。所以我们知道它看起来像:
SBOX^-1 = {null, null, null ..., a, null, null... }
现在让我们转到b。我们加密b
,我们得到w
。所以我们将b
置于w
位置。
SBOX^-1 = {null, null, null ..., a, null, null... ,b, null, null}
你从那里建立了图片。在解密时,您使用相同的key
(虽然在此上下文中我不确定这是一个准确的名称)并且您使用与encrypt
完全相同的方法,只是使用不同的s-box
{1}},或在您的计划中,lock
。
您的代码注意事项
在提问时,请尝试用英语编写代码。 geasse
之类的词语没有任何意义,也无助于轻松传达代码背后的含义。
创建String
时,在循环中追加是实现此目的的极其低效的方法。您应该查看StringBuilder
类,动态创建String
个对象。
额外阅读
阅读substitution boxes。这将解释您试图传达的概念。
了解加密的基础知识。当我了解这些想法时,我发现this是一个非常好的资源。
最后,StringBuilder
类。 Here是一个非常好的教程,由 Oracle 本身提供,用于解释如何使用StringBuilder
类,更重要的是,为什么你应该使用它而不是追加。