我正在研究另一种加密技术,即柱状转置密码技术。 到目前为止,我只尝试制作列,我想要做的是查看矩阵。 但是根据我编写的代码,它只在矩阵中显示一个字母:
import java.io.*;
import java.lang.reflect.Array;
public class transCip {
public static void main(String args[]) {
String keys;
String message;
String encrypt;
String decrypt;
message = "encryptiontextbe";
keys = "work";
encrypt = "";
decrypt = "";
char msg[] = message.toCharArray();
char key[] = keys.toCharArray();
int x = msg.length;
int y = key.length;
char temp[][] = new char[y][x];
if (x % y != 0) {
System.out.println("Cannot encrypt string");
}
for (int i = 0; i < (x/y); i++)
{
for (int j = 0; j < y; j++)
{
int k=0;
temp[i][j] = msg[k];
k++;
}
}
System.out.println("Matrix");
for (int i = 0; i < (x/y); i++)
{
for (int j = 0; j < y; j++)
{
System.out.print(temp[i][j]);
}
System.out.println("");
}
}
}
我目前的输出如下:
Matrix
eeee
eeee
eeee
eeee
我似乎无法弄清楚为什么会发生这种情况;
我也试着在纸上解决这个问题。
答案 0 :(得分:2)
for (int i = 0; i < (x/y); i++)
{
for (int j = 0; j < y; j++)
{
int k=0;
temp[i][j] = msg[k];
k++;
}
}
在循环的每次迭代中将k重置为零,保证始终获得消息字符串的第一个字母“e”。尝试在内循环之前初始化k。通过更好的格式化更容易发现:
for (int i = 0; i < (x/y); i++) {
for (int j = 0; j < y; j++) {
int k=0;
temp[i][j] = msg[k];
k++;
}
}