我使用Ceaser密码(按移位模式将字母表移位(,移位模式为2,然后加密一个句子,将其打印在屏幕上。然后我尝试将加密的消息存储在另一个字符串中,并将其解密回原始字符串。到目前为止,我已经尝试了下面的代码,但无法将其解密回来。基本上是试图用Ceasar的密码加密然后解密,但到目前为止,我只能加密而不能解密。欢迎提出任何建议!
public class Solution { //to keep track of index
public static final String alpha = "abcdefghijklmnopqrstuvwxyz";
public static String encrypt(String message, int shiftKey) {
message = message.toLowerCase();
String cipherText = "";
for (int ii = 0; ii < message.length(); ii++) {
int charPosition = alpha.indexOf(message.charAt(ii));
int keyVal = (shiftKey + charPosition) % 26;
char replaceVal = alpha.charAt(keyVal);
cipherText += replaceVal;
}
return cipherText;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String message = new String();
int key = 0;
System.out.print("Enter the String for Encryption:");
message = sc.next();
System.out.println("nnEnter Shift Key:");
key = sc.nextInt();
System.out.println("nEncrpyted msg:" + encrypt(message, key));
} //main method ends
好的,那么你可以把密码存储在一个String中,然后用这个字符串和-1*密钥调用你的加密方法吗?
如果使用shiftKey = 10
加密,则需要使用shiftKey = 16
解密。因此,当您输入-10
以反转过程时,如果为负数,则需要添加26
。就在你的for(ii ..)
循环之前。
shiftKey = shiftKey < 0 ? alpha.length()+shiftKey : shiftKey;
表示如果shiftKey
小于0
,则添加alpha.length()
。否则保持原样。