Java 我的加密程序需要帮助
我使用input.replace方法创建了一个加密程序,因为它应该加密用户的输入,但我一直遇到的一个问题是,代码从未完全加密。例如,如果我输入“happy”这个词,这个词就会输出“haccl”,当“h”和“a”也应该加密时,它们就不会被碰。这是我的密码:Java 我的加密程序需要帮助,java,encryption,Java,Encryption,我使用input.replace方法创建了一个加密程序,因为它应该加密用户的输入,但我一直遇到的一个问题是,代码从未完全加密。例如,如果我输入“happy”这个词,这个词就会输出“haccl”,当“h”和“a”也应该加密时,它们就不会被碰。这是我的密码: public class HelloWorld { public static void main(String[] args) { System.out.print("Input a word: ");
public class HelloWorld
{
public static void main(String[] args)
{
System.out.print("Input a word: ");
Scanner inputscan = new Scanner(System.in);
String input = inputscan.nextLine();
input = input.replace('A', 'N');
input = input.replace('B', 'O');
input = input.replace('C', 'P');
input = input.replace('D', 'Q');
input = input.replace('E', 'R');
input = input.replace('F', 'S');
input = input.replace('G', 'T');
input = input.replace('H', 'U');
input = input.replace('I', 'V');
input = input.replace('J', 'W');
input = input.replace('K', 'X');
input = input.replace('L', 'Y');
input = input.replace('M', 'Z');
input = input.replace('N', 'A');
input = input.replace('O', 'B');
input = input.replace('P', 'C');
input = input.replace('Q', 'D');
input = input.replace('R', 'E');
input = input.replace('S', 'F');
input = input.replace('T', 'G');
input = input.replace('U', 'H');
input = input.replace('V', 'I');
input = input.replace('W', 'J');
input = input.replace('X', 'K');
input = input.replace('Y', 'L');
input = input.replace('Z', 'M');
input = input.replace('a', 'n');
input = input.replace('b', 'o');
input = input.replace('c', 'p');
input = input.replace('d', 'q');
input = input.replace('e', 'r');
input = input.replace('f', 's');
input = input.replace('g', 't');
input = input.replace('h', 'u');
input = input.replace('i', 'v');
input = input.replace('j', 'w');
input = input.replace('k', 'x');
input = input.replace('l', 'y');
input = input.replace('m', 'z');
input = input.replace('n', 'a');
input = input.replace('o', 'b');
input = input.replace('p', 'c');
input = input.replace('q', 'd');
input = input.replace('r', 'e');
input = input.replace('s', 'f');
input = input.replace('t', 'g');
input = input.replace('u', 'h');
input = input.replace('v', 'i');
input = input.replace('w', 'j');
input = input.replace('x', 'k');
input = input.replace('y', 'l');
input = input.replace('z', 'm');
System.out.println("After replace: " + input);
}
}
您可能希望使用某种类型的数据结构来存储转置
import java.util.*;
公共类加密{
静态最终地图绘制;
静态定形掩模;
公共静态void main(字符串[]args){
系统输出打印(“输入一个单词:”);
扫描仪输入扫描=新扫描仪(System.in);
System.out.println(“替换后:+encrypt(inputscan.nextLine()));
inputscan.close();
}
私有静态字符串加密(字符串明文){
StringBuffer buff=新的StringBuffer();
for(char ch:plaintext.toCharArray()){
buff.append(!mask.contains(ch)和&mapping.containsKey(ch)
?映射。获取(ch)
:ch);
}
返回buff.toString();
}
静止的{
mapping=newhashmap();
mask=newhashset();
mapping.put('A','N');
mapping.put('B','O');
mapping.put('C','P');
mapping.put('D','Q');
mapping.put('E','R');
mapping.put('F','S');
mapping.put('G','T');
mapping.put('H','U');
mapping.put('I','V');
mapping.put('J','W');
mapping.put('K','X');
mapping.put('L','Y');
mapping.put('M','Z');
mapping.put('N','A');
mapping.put('O','B');
mapping.put('P','C');
mapping.put('Q','D');
mapping.put('R','E');
mapping.put('S','F');
mapping.put('T','G');
mapping.put('U','H');
mapping.put('V','I');
mapping.put('W','J');
mapping.put('X','K');
mapping.put('Y','L');
mapping.put('Z','M');
mapping.put('a','n');
mapping.put('b','o');
mapping.put('c','p');
mapping.put('d','q');
mapping.put('e','r');
mapping.put('f','s');
mapping.put('g','t');
mapping.put('h','u');
mapping.put('i','v');
mapping.put('j','w');
mapping.put('k','x');
mapping.put('l','y');
mapping.put('m','z');
mapping.put('n','a');
mapping.put('o','b');
mapping.put('p','c');
mapping.put('q','d');
mapping.put('r','e');
mapping.put('s','f');
mapping.put('t','g');
mapping.put('u','h');
mapping.put('v','i');
mapping.put('w','j');
mapping.put('x','k');
mapping.put('y','l');
mapping.put('z','m');
加上('a');
加上('h');
}
}
下面是一个凯撒密码的实现(改编自)
import java.util.*;
公共类EncryptionUtil{
专用静态最终设置掩码;
静止的{
MASK=newhashset(Arrays.asList('a','h'));
}
公共静态void main(字符串[]args){
字符串短语=“动作>>你好世界”;
System.out.println(短语);
字符串加密=密码(短语,13,掩码);
System.out.println(加密);
字符串明文=密码(加密,13,掩码);
System.out.println(纯文本);
}
私有静态字符串密码(字符串明文、整数移位、设置掩码){
StringBuffer buff=新的StringBuffer();
for(char ch:plaintext.toCharArray()){
如果(!mask.contains(ch)&&Character.isAlphabetic(ch)){
int baseOrd=(int)(ch>='a'?'a':'a');
int origPos=((int)ch)-baseOrd;
int newPos=(origPos+shift)%26;
buff.append((char)(baseOrd+newPos));
}否则{
buff.append(ch);
}
}
返回buff.toString();
}
私有静态字符串密码(字符串明文,int移位){
返回密码(明文、shift、Collections.emptySet());
}
}
输出:
action >> hello world
apgvba >> hryyb jbeyq
actioa >> hello world
您的代码多次替换字母。我的解决方案是使用循环并逐个替换字母:
public class HelloWorld {
public static void main(String[] args) {
System.out.print("Input a word: ");
Scanner inputscan = new Scanner(System.in);
String input = inputscan.nextLine();
StringBuilder stringBuilder = new StringBuilder(input);
for (int i = 0; i < input.length(); i++) {
switch (input.charAt(i)) {
case 'A':
stringBuilder.setCharAt(i, 'N');
break;
case 'B':
stringBuilder.setCharAt(i, 'O');
break;
//Add all the other cases here.
}
}
System.out.println("After replace: " + stringBuilder.toString());
}
}
公共类HelloWorld{
公共静态void main(字符串[]args){
系统输出打印(“输入一个单词:”);
扫描仪输入扫描=新扫描仪(System.in);
字符串输入=inputscan.nextLine();
StringBuilder StringBuilder=新的StringBuilder(输入);
对于(int i=0;i
我将创建一个用于查找的映射,以及一个用于忽略键的掩码。问题是input=input.replace('u','h')代码>发生在input=input.replace('h','u')之后
并将其更改回h
。