MilaDimitrovaa

SHA-256-Homework

Jun 23rd, 2021
747
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package com.company;
  2.  
  3. import java.util.Arrays;
  4. import java.util.Random;
  5. import java.util.Scanner;
  6.  
  7. public class Main {
  8.  
  9.     public static char[] currBinaryStr; //текущ стринг
  10.     public static char[] prevBinaryStr;//предишният стринг
  11.  
  12.     public static char [] nameToCharArr;
  13.     public static int DEC;
  14.     public static char aSCII;
  15.  
  16.     public static void main(String[] args) {
  17.  
  18.         Scanner scan = new Scanner(System.in);
  19.         System.out.println("Input string:");
  20.  
  21.         String name = scan.nextLine(); //въвеждаме име от клавиатурата
  22.  
  23.          nameToCharArr = name.toCharArray(); //конвертираме входния стринг в масив от символи
  24.         int lenght = nameToCharArr.length;
  25.  
  26.         int a = 0;
  27.  
  28.         for (int i = 0; i < nameToCharArr.length; i++) { // фор-цикъл,с който обработваме буква по буква на масива от символи
  29.             int ascII = nameToCharArr[i];  //конвертираме символа в неговия ASCII-код
  30.  
  31.             currBinaryStr = new char[lenght];
  32.             prevBinaryStr = new char[lenght];
  33.  
  34.             prevBinaryStr = Integer.toBinaryString(ascII).toCharArray();//конвертираме ASCII-кода в двоично число
  35.             prevBinaryStr = Arrays.copyOf(currBinaryStr, nameToCharArr.length);
  36.             if (currBinaryStr.length < 8) {
  37.                 while (currBinaryStr.length < 8) {
  38.                     elements();
  39.                 }
  40.             }
  41.             int rot = 13;
  42.             prevBinaryStr = Arrays.copyOf(currBinaryStr, currBinaryStr.length);
  43.             //1. Извикваме метода rOR13 върху currBinaryStr
  44.             //2. Извикваме метода xOR и запазване на резултатав currBinaryStr
  45.             ROT(false, rot);
  46.             XOR();
  47.             prevBinaryStr = Arrays.copyOf(currBinaryStr, currBinaryStr.length);
  48.             rot = 7;
  49.             ROT(false, rot);
  50.             XOR();
  51.             int SHT = 3;
  52.             ROT(true, SHT);
  53.  
  54.             BinarToDecimal();
  55.             decToASCII();
  56.             aSCIIToNameCharr(a);
  57.             a++;
  58.             System.out.println(Arrays.toString(currBinaryStr));
  59.             System.out.println(aSCII);
  60.  
  61.             //3. Извикваме метода rOR17 върху currBinaryStr
  62.             //4. Извикваме метода xOR и запазваме резултата в currBinaryStr
  63.             //5. Извикваме метода sHFTS5 и запазваме резултата в currBinaryStr
  64.  
  65.             //6. Извикваме метода BinToDecimal,за конвертиране на двоични числа (currBinaryStr) в десетично
  66.             //7. Конвертираме десетичното число в символ(ASCII-код)
  67.             //8. Записваме си получения символ в масива nameToCharArr[i] на съответната позиция
  68.  
  69.         }
  70.         System.out.println("FINAL RESULT: " + Arrays.toString(nameToCharArr));
  71.     }
  72.  
  73.     public static void BinarToDecimal() {
  74.         String currentBIN = String.valueOf(currBinaryStr);
  75.  
  76.         DEC = Integer.parseInt(currentBIN, 2);
  77.  
  78.         if(DEC < 33 || DEC > 126){
  79.             Random randomElements = new Random();
  80.             int minASCII = 33;
  81.             int maxASCII = 127;
  82.             DEC = randomElements.nextInt(maxASCII - minASCII + 1) + minASCII;
  83.         }
  84.         System.out.println("NUMBER: " + DEC);
  85.     }
  86.  
  87.     public static void decToASCII() {
  88.  
  89.         aSCII = (char)DEC; //кастваме
  90.     }
  91.     public static  void aSCIIToNameCharr(int a){
  92.  
  93.         nameToCharArr[a] = aSCII;
  94.     }
  95.  
  96.     public static void XOR() {
  97.         for (int i = 0; i < currBinaryStr.length; i++) {
  98.             if (currBinaryStr[i] == prevBinaryStr[i]) {
  99.  
  100.                 currBinaryStr[i] = '0';
  101.             }else{
  102.                 currBinaryStr[i] = '1';
  103.             }
  104.         }
  105.     }
  106.  
  107.  
  108.     public static void ROT(boolean RorS, int ROT) {
  109.         if (!RorS) {
  110.             for (int i = ROT; i > 0; i--) {
  111.                 char last = currBinaryStr[currBinaryStr.length - 1];
  112.                 for (int j = currBinaryStr.length - 1; j > 0; j--) {
  113.                     currBinaryStr[j] = currBinaryStr[j - 1];
  114.                 }
  115.                 currBinaryStr[0] = last;
  116.             }
  117.         } else {
  118.             for (int i = ROT; i > 0; i--) {
  119.                 for (int j = currBinaryStr.length - 1; j > 0; j--) {
  120.                     currBinaryStr[j] = currBinaryStr[j - 1];
  121.                 }
  122.                 currBinaryStr[0] = '0';
  123.             }
  124.  
  125.         }
  126.     }
  127.  
  128.     public static void elements() {
  129.         char b = '0';
  130.         char[] currArr = new char[currBinaryStr.length + 1];
  131.  
  132.         int index1 = 0;
  133.         int index2 = 0;
  134.  
  135.         for (int i = 0; i < currArr.length; i++) {
  136.             if (i == index1) {
  137.                 currArr[i] = b;
  138.             } else {
  139.                 currArr[i] = currBinaryStr[index2];
  140.                 index2++;
  141.             }
  142.         }
  143.         currBinaryStr = currArr;
  144.      }
  145.     }
  146.  
  147.  
RAW Paste Data