我想不出解密的逻辑

时间:2014-01-30 22:57:09

标签: java arrays encryption

那么我在解密块中写什么?有任何想法吗?我必须制作一个程序来加密用户输入的任何内容并对其进行解密。这种语法是一个垫脚石,我将在稍后添加扫描仪和系统输入。我只是想在我的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;
    }

}

1 个答案:

答案 0 :(得分:3)

我要做的假设

  • 当你说Decrypt时,你的意思是加密。 (虽然我会说明它们是如何相同的)
  • 您对加密术语的了解并不多。
  • 你犯了一些错误,所以我会纠正它们。

您所写的内容实际上称为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类,更重要的是,为什么你应该使用它而不是追加。