作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要帮助实现维吉尼亚密码。我的输入字符串“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 <= 65 && x >= 90
中没有 x .
如果是大写字母,您需要减去“A”并添加 key 。
解决方案如下:
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”wit key = “abc”的输出:
Cbv&Eqg
关于java - 在实现维吉尼亚密码方面需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56473226/
我是一名优秀的程序员,十分优秀!