试图创建一个简单的加密程序

时间:2017-01-04 14:49:03

标签: java encryption

我正在尝试创建一个简单的加密程序,可以轻松加密和解密,没什么特别的。 到目前为止,我已经设置了基本输入:

import java.util.Scanner;
class test {
 private static Scanner inp;
 public static void main(String[] args) {
    inp = new Scanner(System.in);
    System.out.println("Input Password");
    int n = inp.nextInt();
    System.out.println(n);
    if(n!=234) {
        System.out.println("Denied Acess");
    } else { 
        System.out.print("Password Accepted");
    }
    System.out.print("Input Text to encrypt: ");
    String m = inp.next();
    System.out.println(m);
 }
}

我刚刚开始使用java,这是我的第一个真正的程序,因为我在教自己它很慢:P(我几天前才开始)

无论如何,我需要一种方法来进行质量输入并将质量输出放在我可以定位字母/数字并将它们更改为相应的预设字符串

示例:

  

输入文字:您好

     

输出文字:{aeh} {wer} {qds} {qds} {cxv}

但是我还需要一种方法来在输入时读取输出代码并让它输出原始输入,我不知道我是否可以用多个数字来做,除非我可以做一个if else嵌套,例如

if(dig1==a) {
 if(dig2==b) {
  if(dig3==c) {
System.out.print("a")
} else {
 if(dig1==b) {
  if(dig2==c) {
   if(dig3==d) {
System.out.print("b")
} else {
if (dig1==c) {
 if (dig2==d) {
ect.

但即便如此我也不知道如何自动设置它以便程序可以自动为每个数字/设置一个变量,然后将其输出相应的字符串

1 个答案:

答案 0 :(得分:2)

我将您的问题读作:您已经拥有翻译字符串的代码

"He"

进入

"{aeh}{wer}"

现在你问的是如何以合理的方式扭转这种局面。

一个选项:使用Map<String, String>让您可以轻松获得映射:

Map<Character, String> encryptionMappings = new HashMap<>();
encryptionMappings.put('H', "{aeh}");
encryptionMappings.put('e', "{wer}");
... and so on: one put() for all characters you wish to support
Map<String, Character> decryptionMappings = new HashMap<>();
decryptionMappings.put("{aeh}", 'H');
... as above, just "reversed"

现在您可以编写如下代码:

String encryptMe = "He";
StringBuilder builder = new StringBuilder();
for (Character c : encryptMe.toCharArray() ) {
  builder.append(encryptionMap.get(c));
}
String encrypted = builder.toString();

上面按字符迭代字符串,然后使用Map查找替换每个字符的字符串。

De-crypt非常相似:您可以迭代字符串列表/数组:

String[] deecryptMe = new String[] { "{aeh}", "{wer}" };
StringBuilder builder = new StringBuilder();
for (String str : deecryptMe) {
  builder.append(deecryptionMap.get(str));
}
String decrypted = builder.toString();

(请注意:上面的意思是“伪代码”;我没有通过编译器运行它;所以要注意拼写错误。这个想法是,它会告诉你哪些类是什么,以及如何使用它们简化你正在做的事情)

除此之外:你不需要手动放下解密图 - 你可以在运行时构建它,通过迭代其他地图并从那里获取信息。

最后:这里的一个核心部分是遵守单一责任原则

更新:字符串的加密/解密... 一个方。你不应该混合与“扫描仪”工作。含义:从一个接受String并返回加密String的方法开始。测试一下。然后创建一个解密的方法。 (你可以做一些很好的事情,例如检查decrypt(encrypt("whatever")).equals("whatever")

当所有这些都奏效时;然后你编写要求用户输入的代码;并给你字符串;您然后将其纳入现有方法。