Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.math.BigInteger;
- import java.nio.ByteBuffer;
- import java.nio.ByteOrder;
- import java.util.Arrays;
- import java.util.Scanner;
- public class trivium {
- public static int XOR(int a, int b){
- return (a+b)%2;
- }
- public static int AND(int a, int b){
- return (a+b)/2;
- }
- public static int[] fullStream(int[]a, int[]b){
- int[] niza = new int[288];
- for(int i = 0; i < a.length + b.length; i++){
- if(i < a.length)
- niza[i] = a[i];
- else
- niza[i+13] = b[i-a.length];
- }
- niza[286]=niza[287]=niza[285] = 1;
- System.out.println(Arrays.toString(niza).replaceAll("\\[|\\]|,|\\s", ""));
- return niza;
- }
- public static int[] KeyStream(int[] array){
- int[]TheKey = new int[512];
- int z = 0;
- for(int i = 0; i < 1664; i++) {
- int t1 = array[65] + array[92];
- int t2 = array[161] + array[176];
- int t3 = array[242] + array[287];
- if(i >=1152) {
- z = XOR(t1, XOR(t2, t3));
- TheKey[i-1152] = z;
- }
- t1 = XOR(array[170], XOR(t1, AND(array[90], array[91])));
- t2 = XOR(array[263], XOR(t2, AND(array[174], array[175])));
- t3 = XOR(array[68], XOR(t3, AND(array[285], array[286])));
- for(int j = 92; j > 0; j--){
- array[j] = array[j-1];
- }
- for(int j = 176; j > 93; j--){
- array[j] = array[j-1];
- }
- for(int j = 287; j > 177; j--){
- array[j] = array[j-1];
- }
- array[0] = t3;
- array[93] = t1;
- array[177] = t2;
- }
- return TheKey;
- }
- public static String littleEnd(String a){
- char[] pom = new char[a.length()];
- int k = a.length()-1;
- for(int i = 0; i < a.length(); i=i+2){
- pom[i] = a.charAt(k-1);
- pom[i+1] = a.charAt(k);
- k=k-2;
- }
- return new String(pom);
- }
- public static int[] transform(char[]a){
- String ss = new String(a);
- String s = littleEnd(ss);
- int decimal = Integer.parseInt(s, 16);
- int[] result = new int[80];
- String binary = Integer.toBinaryString(decimal);
- for(int i = 0; i < binary.length();i++){
- result[i+72] = Character.digit(binary.charAt(i), 10);
- }
- return result;
- }
- public static void main(String[] args){
- char key[] = new char[20];
- char IV[] = new char[20];
- Scanner scanner = new Scanner(System.in);
- for(int i = 0; i < 40; i++){
- if(i < 20)
- key[i] = scanner.next().charAt(0);
- else
- IV[i-20] = scanner.next().charAt(0);
- }
- int[] kluc = transform(key);
- int[] iv = transform(IV);
- int[] stream = fullStream(kluc,iv);
- int[]keyyy = KeyStream(stream);
- String GeneratedKeyString = Arrays.toString(keyyy).replaceAll("\\[|\\]|,|\\s", "");
- System.out.println(GeneratedKeyString);
- String res = BinaryToHexi(GeneratedKeyString);
- System.out.println("result " + res);
- }
- public static String BinaryToHexi(String Binary){
- int end = 8;
- int start = 0;
- String[] Array = new String[Binary.length() / 8];
- for(int i = 0;i < Binary.length()/8;i ++){
- String eight = Binary.substring(start,end);
- eight = littleEnd(eight);
- BigInteger big = new BigInteger(eight,2);
- //System.out.println("BigInt binary: " + big);
- eight = big.toString(16);
- Array[i] = eight;
- end += 8;
- start += 8;
- }
- return Arrays.toString(Array).replaceAll("\\[|\\]|,|\\s", "");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement