[英]Need Help in implementation of vigenere cipher
我需要實施Vigenere密碼的幫助。 我的輸入字符串“ Cat&Dog”的鍵為“ abc”,應返回“ Cbv&Eqg”,但是我得到的“ cat&eqg”的代碼如下所示。
public class Main {
public static void main(String[] args) {
String a = "Cat&dog";
String b = "abc";
String c = encrypt(a , b);
System.out.println(c);
}
public static String encrypt (String text, String key){
String result = "";
for (int i = 0, j = 0; i < text.length(); i++){
char cur = text.charAt(i);
if (cur > 'a' && cur < 'z'){
result += (char)((cur + key.charAt(j) - 2 * 'a') % 26 +'a');
j = ++j % key.length();
}
else if (cur <= 'A' && cur >= 'Z'){
result += (char)((cur - key.charAt(j) -2 * 'a') % 26 +'A');
j = ++j % key.length();
}
else {
result += text.charAt(i);
}
}
return result;
}
}
您的情況else if(cur <= 'A' && cur >= 'Z')
永遠不會成立。 沒有x x <= 65 && x >= 90
。
而且,您無需減去“ A”並在大寫字母的情況下添加密鑰。
所以這里的解決方案:
public static String encrypt (String text, String key){
String result = "";
for (int i = 0, j = 0; i < text.length(); i++){
char cur = text.charAt(i);
if (cur >= 'a' && cur <= 'z'){
result += (char) ((cur + key.charAt(j) - 2 * 'a') % 26 + 'a');
}
else if (cur >= 'A' && cur <= 'Z'){
result += (char) ((cur - 'A' + key.charAt(j) - 'a') % 26 + 'A');
}
else {
result += text.charAt(i);
}
j = ++j % key.length();
}
return result;
}
“ Cat&Dog”機智密鑰=“ abc”的輸出:
CBV和EQG
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.