作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java 新手,我需要编写一个算法来使用强力破解凯撒密码,然后匹配字典中的单词以找到正确的移位。这就是我到目前为止编写的代码。如果有人帮助我实现移动字母并将其与文件dictionary.txt 进行匹配,我将非常感激。
private char[] alphabet = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
private char[] decodedText;
private String plainText;
public String producePlaintext(String cipherText) {
//put each letter of the ciphertext in an array of characters in the upper case format
char[] message = cipherText.toUpperCase().toCharArray();
//loop through all the possible keys
for (int key = 0; key < alphabet.length; key++) {
//set the value of the decrypted array of characters to be the same as the length of the cipher text
decodedText = new char[message.length];
//loop through the characters of the ciphertext
for (int i = 0; i < message.length; i++) {
//if character is not space
if (message[i] != ' ') {
//shift the letters
}else{
decodedText[i] = ' ';
}
}
plainText = String.valueOf(decodedText);
}
return plainText;
}
最佳答案
您需要将字母数组转换为 List
才能使用 indexOf
方法:
private List<Character> alphabetList = java.util.Arrays.asList(alphabet);
在里面您可以执行以下操作:
decodedText[i] = alphabet[(alphabetList.indexOf(message[i])+key) % alphabet.length];
您可能应该以 1
而不是 0
开始 key
的迭代,因为这样您将只得到密文。
完整的解决方案:
public class Test01 {
private Character[] alphabet = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
private char[] decodedText;
private String[] plainText;
private java.util.List<Character> alphabetList;
public Test01(){
alphabetList = java.util.Arrays.asList(alphabet);
plainText = new String[alphabet.length];
}
public String[] producePlaintext(String cipherText) {
//put each letter of the ciphertext in an array of characters in the upper case format
char[] message = cipherText.toUpperCase().toCharArray();
//loop through all the possible keys
for (int key = 0; key < alphabet.length; key++) {
//set the value of the decrypted array of characters to be the same as the length of the cipher text
decodedText = new char[message.length];
//loop through the characters of the ciphertext
for (int i = 0; i < message.length; i++) {
//if character is not space
if (message[i] != ' ') {
//shift the letters
decodedText[i] = alphabet[(alphabetList.indexOf(message[i])+key) % alphabet.length];
}else{
decodedText[i] = ' ';
}
}
plainText[key] = String.valueOf(decodedText);
}
return plainText;
}
public static void main(String[] args) {
Test01 t = new Test01();
for(String pt : t.producePlaintext("abc")) {
System.out.println(pt);
}
}
}
注意字符类型的差异。
关于Java凯撒密码暴力破解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23582694/
用户将输入重量阈值、物体数量以及 3 个物体的重量和成本。输出应该是背包图,并且应该显示最优解。 重量应该最大,成本应该最小。 示例输出: w=60 n=3 w = 10 w2 = 35 w3 = 3
所以我在学习 Python 的同时从“Violent Python”开始黑客攻击,我遇到了一个问题这是我的代码: import optparse import socket from socket i
我是一名优秀的程序员,十分优秀!