Я с трудом пытался создать столбчатый шифр, включающий бинарный файл любой формы, и сохранять его в многомерном байт-массиве. В настоящее время я застрял при попытке сохранить файл в bytearray (версия с файлами) и распечатать bytearray по вертикали, не теряя при этом некоторые символы с учетом пробелов в String.
Я пытался найти другие реализации Columnar. шифр. Однако они не использовали bytearray и использовали заполнители для заполнения пустого пространства в пустых слотах в массиве. Я не могу сделать это на моем, так как эти вовлеченные файлы и пробелы также считаются байтами.
Тестовая версия, включающая строки.
System.out.println("Enter your plaintext: ");
String plaintext = sc.nextLine();
System.out.println("Enter your key: ");
String key = sc.nextLine();
int col = key.length();
int row = plaintext.length() / col;
if(plaintext.length() % col == 1) {
row += 1;
}
byte[][] ciphertext = new byte[row][col];
int z = 0;
for (int x = 0; x < row; x++) {
for (int y = 0; y < col;) {
ciphertext[x][y] = (byte) plaintext.charAt(z);
z++;
y++;
}
}
for (int i = 0; i < col; i++) {
for (int j = 0; j < row; j++) {
System.out.print((char) ciphertext[i][j]);
}
}
}
Версия, которая включает файлы.
//User enters the file directory.
System.out.print("Enter a file name: ");
String filename = in.nextLine();
//User enters the key.
System.out.print("Enter your key: ");
String key = in.nextLine();
File file = new File(filename);
int col = key.length();
int row = (byte) file.length() / col;
if (file.length() % col == 1) {
row += 1;
}
byte[][] filebyte = new byte[row][col];
try {
FileInputStream fileInputStream = new FileInputStream(file);
//FileInputStream.read(filebyte);
int z = 0;
for (int x = 0; x < row; x++) {
for (int y = 0; y < col;) {
filebyte[x][y] = (byte) file.length(z);
z++;
y++;
}
}
for (int i = 0; i < col; i++) {
for (int j = 0; j < row; j++) {
System.out.print((char) filebyte[j][i]);
}
}
}
catch (FileNotFoundException e) {
System.out.println("File Not Found.");
e.printStackTrace();
}
}
Тестовая версия, включающая строки с пробелами.
Введите ваш текст:
Hibiki Sakura
Введите ваш ключ:
thic
Исключение в потоке "main" java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: 13
at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
at java.base/java.lang.String.charAt(String.java:702)
at Columnar.main(Columnar.java:27)
Версия, включающая файлы. Использование file.length (). Demo.java:41: ошибка: длина метода в классе File не может быть применена к данным типам;filebyte [x] [y] = file.length (z);
Тип приведен к int. Demo.java:41: ошибка: несовместимые типы: возможное преобразование с потерями из int в байтовый файл byte [x] [y] = (int) file.length (z);
Типизация в байтах. Demo.java:41: ошибка: длина метода в классе File не может быть применена к данным типам;filebyte [x] [y] = (байт) file.length (z);