fork(3) download
  1. import java.io.*;
  2. public class LFSR {
  3. static FileWriter out = null; //открытый файл
  4. static BufferedReader in = null; //шифрованный
  5. static FileWriter keyIn = null; //запись ключа при шифрации
  6. static BufferedReader keyOut = null; //чтение ключа при дешифрации
  7.  
  8. public static void main(String[] args) throws IOException{
  9. try{
  10. out = new FileWriter(args[1], false); //файл для записи шифротекста
  11. in = new BufferedReader(new FileReader(args[0])); //файл открытого текста
  12. if(args[3].equals("-cod")) coding(args[2]); //шифрация, передаем путь для ключа
  13. else if(args[3].equals("-decod")) decoding(args[2]); //дешифрация
  14. else {
  15. System.out.println("\nЗадан неверный флаг "+ args[3] + " допустимы -cod (шифрация) и -decod (дешифрация)");
  16. System.exit(3);
  17. }
  18. System.out.println("\nШифрование: LFSR In.txt Out.txt. Key.txt -cod, где\n"
  19. + "In - файл, который требуется зашифровать\n"
  20. + "Out - файл, куда будет записан шифрованный текст\n"
  21. + "Key - файл, куда будет записан 16-битный ключ\n"
  22. + "-cod - команда шифрации\n"
  23. + "\nДешифрация: LFSR In.txt Out.txt. Key.txt -decod, где\n"
  24. + "In - файл, который требуется расшифровать\n"
  25. + "Out - файл, куда будет записан расшифрованный текст\n"
  26. + "Key - файл с 16-битным ключом\n"
  27. + "-decod - команда дешифрации\n");
  28. System.exit(1);
  29. } catch (FileNotFoundException ex){
  30. System.out.println("\nФайл " + args[0] + " не найден.");
  31. System.exit(2);
  32. }
  33. System.out.println("Successfully");
  34. }
  35. public static int [] getKey() throws IOException{
  36. int key[] = new int[16];
  37. java.util.Random rand = new java.util.Random();
  38. for(int r = 0; r < key.length; r++)
  39. key[r]=rand.nextInt(2);
  40. return key;
  41. }
  42. public static long getGamma(int key[]) { //гамма 32 бит
  43. int n = key.length; //длина регистра
  44. String g = "";
  45. int S = 0;
  46. for (int t = 0; t < 32; t++) { // формирование гаммы с использованием многочлена
  47. S = (key[n-1]);
  48. S = ((( (S >> 15) ^ (S >> 4) ^ (S >> 2) ^ (S >> 1) ^ S ) & 0x00000001 ) << 15 ) | (S >> 1);
  49. for (int i = n-1; i > 0; i--) //сдвиг ячеек регистра
  50. key[i] = key[i-1];
  51. key[0] = S; //запись сформированного бита
  52. if(S>0) g += 1; //формирование гаммы
  53. else g += 0;
  54. }
  55. return Long.parseLong(g, 2);
  56. }
  57. public static void overlayGamma(long gamma) throws IOException{
  58. String line = "";
  59. while((line = in.readLine()) != null)
  60. for(int i = 0; i < line.length(); i++)
  61. out.write((char)(line.charAt(i) ^ gamma));
  62. }
  63. public static void coding(String path) throws IOException{
  64. int key[] = getKey(); //формирование ключа, инициализация регистра
  65. try{
  66. keyIn = new FileWriter(path, false);
  67. for(int i = 0; i < key.length; i++) //запись ключа в файл
  68. keyIn.write(Integer.toString(key[i]));
  69. overlayGamma(getGamma(key)); //наложение полученной гаммы на открытый текст
  70. } finally{
  71. out.close();
  72. in.close();
  73. keyIn.close();
  74. }
  75. }
  76. public static void decoding(String path) throws IOException{
  77. int key[] = new int[16];
  78. String k = "";
  79. try{
  80. keyOut = new BufferedReader(new FileReader(path));
  81. if((k = keyOut.readLine()) != null);
  82. for(int i = 0; i < k.length(); i++) //получаем ключ
  83. key[i] = Character.digit(k.charAt(i),10);
  84. overlayGamma(getGamma(key)); //наложение полученной гаммы на шифротекст
  85. } catch (FileNotFoundException ex){
  86. System.out.println("\nФайл с ключом " + path + " не найден.");
  87. System.exit(2);
  88. }
  89. finally{
  90. keyOut.close();
  91. out.close();
  92. in.close();
  93. }
  94. }
  95. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:2: error: class LFSR is public, should be declared in a file named LFSR.java
public class LFSR {
       ^
1 error
stdout
Standard output is empty