java - 尝试创建一个简单的加密程序

标签 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(我几天前才开始)

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

示例:

input text: Hello

output text: {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.

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

最佳答案

我读到你的问题是:你已经有了翻译字符串的代码

"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查找替换每个字符的字符串。

解密非常相似:您可以迭代字符串列表/数组:

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")

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

关于java - 尝试创建一个简单的加密程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41466665/

相关文章:

java - 有没有办法使用 IBM websphere 在预定时间运行 jar

javascript - 将 javascript 对象列表发送到 Spring MVC 中的 Controller 时出现问题

java - 将 ArrayList 转换为 varargs 构造函数的单独参数

java - 如何在隐式 long 到 double 转换时产生编译错误?

asp.net - 如何实现在 ASP.NET 2.0、Coldfusion 5 和 Classic ASP 之间互操作的强大、可逆加密?

java - 将正则表达式转换为 java 兼容正则表达式的简单方法?

encryption - 加密/解密字符串 Kotlin

security - 我怎么知道OpenSSL ChaCha密码中的SHA类型

android - 低功耗蓝牙安全性如何在 Android 应用程序和 BLE 设备之间发挥作用?

java - 使用 javax.net.ssl.SSLContext 时禁用弱 ssl 密码