📄 transpositioncipher.java
字号:
import sheffield.EasyReader;
public class TranspositionCipher {
public static String createRandomString(int len) {
if (len > 0) {
char[] cs = new char[len];
for (int i = 0; i < len; i++) {
cs[i] = (char) (Math.floor(Math.random() * 26) + 'a');
}
return new String(cs);
} else {
return "";
}
}
public static String readFile(String fileName) {
String result = "";
EasyReader file = new EasyReader(fileName);
while (!file.eof()) {
result += file.readString();
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
String ciphertext = readFile("plain.txt");
EasyReader kb= new EasyReader();
String s=kb.readString();
Key key = new Key(s);
// 拼凑出是key长度倍数的字符串
ciphertext += createRandomString(key.getLength() - ciphertext.length()
% key.getLength());
// 转换成大写的字符数组
char[] cs = ciphertext.toUpperCase().toCharArray();
// 二维数组共有几行
/* j a m e s b o n d
* (5)(1)(6)(4)(9)(2)(8)(7)(3)
* s e n d o n e
* m i l l i o n e
* u r o s t o m
* y s w i s s b
* a n k a c c o u
* n t a b c d e f g
*
* rowNumber = 6;
*
* */
int rowNumber = cs.length / key.getLength();
// 序列数组
int[] sequence = key.getSequence();
// 构建一个结果字符串数组
char[] result = new char[cs.length];
// 我们现在要做的就是将横向的数组变成纵向的
for (int i = 0; i < sequence.length; i++) {
for (int j = 0; j < rowNumber; j++) {
// 我们可以把result看成有9行6列的数组
result[(sequence[i] - 1) * rowNumber + j] = cs[j
* key.getLength() + i];
}
}
System.out.println(new String(result));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -