Java 我想不出解密的逻辑

Java 我想不出解密的逻辑,java,arrays,encryption,Java,Arrays,Encryption,那么我在解密块中写什么呢?有什么想法吗?我必须制作一个程序,对用户输入的任何内容进行加密,并对其进行解密。这个语法是一个垫脚石,因为稍后我将添加扫描仪和系统输入。我只是想确保在打印语句中使用这些方法时,它们能够正常工作 public class KeysLocks { public static void main(String[] args) { String message = "super saiyan"; System.out.println(

那么我在解密块中写什么呢?有什么想法吗?我必须制作一个程序,对用户输入的任何内容进行加密,并对其进行解密。这个语法是一个垫脚石,因为稍后我将添加扫描仪和系统输入。我只是想确保在打印语句中使用这些方法时,它们能够正常工作

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;
    }

}
公共类密钥锁{
公共静态void main(字符串[]args){
字符串消息=“超级赛扬”;
System.out.println(“message:+message”);
字符串加密=加密(消息);
System.out.println(“加密:”+加密);
字符串解密=解密(消息);
System.out.println(“解密:”+解密);
}
私有静态字符串加密(字符串消息){
String key=“abcdefghijklmnopqrstuwxyz”;
String lock=“qwertyuiopasdfghjklzxcvnm”;
字符串加密的_句子=”;
字符短语[]=message.toCharArray();
for(int i=0;i
我将要做出的假设

  • 当你说解密,你的意思是加密。(尽管我将展示它们是如何相同的)
  • 你对密码术语不太了解
  • 你犯了一些错误,所以我会一直改正的
您所写的内容实际上被称为
s-box
。这是一个替换框,用另一个字母替换一个字母,用于混淆明文和密文之间的关系。您的
s-box
如下所示:

SBOX = {q,w,e,r,t,y...m}
您将输入的文本映射到字符输入,因此要对其进行解密,您需要执行相同的操作,但操作相反

SBOX^-1 = "Something"
现在我们需要解决如何反转映射,让我们从头开始。如果我用你的
s-box
加密
a
,它会给我一个
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}
然后你从那里建立了一幅画面。解密时,您使用相同的
密钥
(尽管在此上下文中,我不确定这是一个准确的名称),并且您使用与
加密
完全相同的方法,只是使用不同的
s-box
,或者在程序中使用

关于代码的一般说明

  • 问问题时,试着用英语写代码。像
    geasse
    这样的词没有任何意义,也无助于轻松传达代码背后的含义

  • 创建
    字符串时
    ,在循环内部追加是一种效率极低的方法。您应该查看
    StringBuilder
    类,动态创建
    String
    对象

额外阅读

  • 读一读。这将解释您试图传达的概念

  • 阅读有关加密的基础知识。当我学习这些想法时,我发现自己是一个很好的资源

  • 最后是
    StringBuilder
    类。这是一个非常好的教程,由Oracle自己提供,用来解释如何使用
    StringBuilder
    类,更重要的是,为什么要在附加时使用它


您似乎已经在解密块中写入了一些内容。虽然这不是一个加密安全的算法,但我假设你只是在玩。。那么,您是在寻找相应的加密吗?您是在要求加密方案吗?加密的结果和解密的参数是字节[],而不是字符串。字符串不是二进制数据的容器。为什么解密的结果被命名为“encrypted_Session”?哇,我不小心把语法放在了decrypt()not encrypt()中,我已经尽可能全面地回答了。如果你需要进一步的帮助,请添加评论。我真的不知道我的教授为什么给我们这个作业。这一点都不基本,处理起来非常令人沮丧。没关系,你只需要花一分钟时间考虑一下。你卡在哪里了?我必须在解密块中使用SBOX的部分。我们可以去聊天吗?我真的需要一个演练员