Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.90 KB | None | 0 0
  1. import java.math.BigInteger;
  2. import java.nio.ByteBuffer;
  3. import java.nio.ByteOrder;
  4. import java.util.Arrays;
  5. import java.util.Scanner;
  6.  
  7. public class trivium {
  8. public static int XOR(int a, int b){
  9. return (a+b)%2;
  10. }
  11.  
  12. public static int AND(int a, int b){
  13. return (a+b)/2;
  14. }
  15. public static int[] fullStream(int[]a, int[]b){
  16. int[] niza = new int[288];
  17. for(int i = 0; i < a.length + b.length; i++){
  18. if(i < a.length)
  19. niza[i] = a[i];
  20. else
  21. niza[i+13] = b[i-a.length];
  22. }
  23. niza[286]=niza[287]=niza[285] = 1;
  24. System.out.println(Arrays.toString(niza).replaceAll("\\[|\\]|,|\\s", ""));
  25.  
  26. return niza;
  27. }
  28.  
  29. public static int[] KeyStream(int[] array){
  30. int[]TheKey = new int[512];
  31. int z = 0;
  32. for(int i = 0; i < 1664; i++) {
  33. int t1 = array[65] + array[92];
  34. int t2 = array[161] + array[176];
  35. int t3 = array[242] + array[287];
  36. if(i >=1152) {
  37. z = XOR(t1, XOR(t2, t3));
  38. TheKey[i-1152] = z;
  39. }
  40. t1 = XOR(array[170], XOR(t1, AND(array[90], array[91])));
  41. t2 = XOR(array[263], XOR(t2, AND(array[174], array[175])));
  42. t3 = XOR(array[68], XOR(t3, AND(array[285], array[286])));
  43.  
  44. for(int j = 92; j > 0; j--){
  45. array[j] = array[j-1];
  46. }
  47. for(int j = 176; j > 93; j--){
  48. array[j] = array[j-1];
  49. }
  50. for(int j = 287; j > 177; j--){
  51. array[j] = array[j-1];
  52. }
  53.  
  54. array[0] = t3;
  55. array[93] = t1;
  56. array[177] = t2;
  57.  
  58. }
  59.  
  60. return TheKey;
  61.  
  62. }
  63.  
  64. public static String littleEnd(String a){
  65. char[] pom = new char[a.length()];
  66. int k = a.length()-1;
  67. for(int i = 0; i < a.length(); i=i+2){
  68. pom[i] = a.charAt(k-1);
  69. pom[i+1] = a.charAt(k);
  70. k=k-2;
  71. }
  72. return new String(pom);
  73. }
  74.  
  75. public static int[] transform(char[]a){
  76. String ss = new String(a);
  77. String s = littleEnd(ss);
  78. int decimal = Integer.parseInt(s, 16);
  79.  
  80. int[] result = new int[80];
  81. String binary = Integer.toBinaryString(decimal);
  82. for(int i = 0; i < binary.length();i++){
  83.  
  84. result[i+72] = Character.digit(binary.charAt(i), 10);
  85. }
  86.  
  87. return result;
  88.  
  89. }
  90.  
  91. public static void main(String[] args){
  92.  
  93. char key[] = new char[20];
  94. char IV[] = new char[20];
  95. Scanner scanner = new Scanner(System.in);
  96.  
  97. for(int i = 0; i < 40; i++){
  98. if(i < 20)
  99. key[i] = scanner.next().charAt(0);
  100. else
  101. IV[i-20] = scanner.next().charAt(0);
  102. }
  103.  
  104. int[] kluc = transform(key);
  105. int[] iv = transform(IV);
  106.  
  107. int[] stream = fullStream(kluc,iv);
  108. int[]keyyy = KeyStream(stream);
  109. String GeneratedKeyString = Arrays.toString(keyyy).replaceAll("\\[|\\]|,|\\s", "");
  110. System.out.println(GeneratedKeyString);
  111. String res = BinaryToHexi(GeneratedKeyString);
  112. System.out.println("result " + res);
  113.  
  114. }
  115. public static String BinaryToHexi(String Binary){
  116.  
  117. int end = 8;
  118. int start = 0;
  119.  
  120. String[] Array = new String[Binary.length() / 8];
  121. for(int i = 0;i < Binary.length()/8;i ++){
  122.  
  123. String eight = Binary.substring(start,end);
  124. eight = littleEnd(eight);
  125.  
  126. BigInteger big = new BigInteger(eight,2);
  127. //System.out.println("BigInt binary: " + big);
  128. eight = big.toString(16);
  129.  
  130. Array[i] = eight;
  131.  
  132. end += 8;
  133. start += 8;
  134.  
  135. }
  136.  
  137. return Arrays.toString(Array).replaceAll("\\[|\\]|,|\\s", "");
  138.  
  139. }
  140.  
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement