java - 加密用户输入

标签 java encryption

我正在制作一个加密程序,对用户输入的单词进行加密,除了输出输入的加密单词之外,我一切正常。这是我的代码现在的样子:

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

  • 寻找重复模式,例如 INGTHION

仅使用这四件事就可以为您提供破解替换密码的非常好的统计概率。如果您想了解更多有关它们的信息,我会查看 here.

关于java - 加密用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066953/

相关文章:

java使用相同的 key 加密解密密码md5

java - 在sharedprefs中存储 secret 数据 - android

python - 获取长十六进制哈希值

Java 应用程序在 Ubuntu 12.04 上不接收信号

java - 如何修复此错误?我想构建应用程序加密和解密文件,但显示错误如何修复它?

Java套接字通信——传输加密数据

security - https 是否加密整个 URL?

ssl - 使用 Cloudflare SSL 证书 + nginx letsencrypt 证书进行双重加密?

java - Java中存储常量

java - Hibernate 查询 - ClassCastError