From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- Master/Kryptografie/p2/GalController.java | 76 +++++++++++ Master/Kryptografie/p2/GalNumber.java | 206 ++++++++++++++++++++++++++++++ Master/Kryptografie/p2/GalTest.java | 71 ++++++++++ 3 files changed, 353 insertions(+) create mode 100644 Master/Kryptografie/p2/GalController.java create mode 100644 Master/Kryptografie/p2/GalNumber.java create mode 100644 Master/Kryptografie/p2/GalTest.java (limited to 'Master/Kryptografie/p2') diff --git a/Master/Kryptografie/p2/GalController.java b/Master/Kryptografie/p2/GalController.java new file mode 100644 index 0000000..00a34f2 --- /dev/null +++ b/Master/Kryptografie/p2/GalController.java @@ -0,0 +1,76 @@ +package krypto; + +public class GalController { + + int key_s = 7; + int key_t = 3; + + private char encryptChar(char klar) + { + GalNumber gn_geheim = new GalNumber(); + GalNumber gn_klar = new GalNumber((int)klar); + GalNumber gn_key_s = new GalNumber(key_s); + GalNumber gn_key_t = new GalNumber(key_t); + GalNumber rijndael_mod = new GalNumber(GalNumber.RIJN_MOD); + + gn_geheim = gn_klar.add(gn_key_s).mult(gn_key_t.mod(rijndael_mod)); + + System.out.println("Klar: "+gn_klar.toHex()+" Geheim: "+gn_geheim.toHex()); + + return gn_geheim.toChar(); + } + + private char decryptChar(char geheim) + { + GalNumber gn_geheim = new GalNumber(); + GalNumber gn_klar = new GalNumber(); + GalNumber gn_key_s = new GalNumber(key_s); + GalNumber gn_key_t = new GalNumber(key_t); + GalNumber rijndael_mod = new GalNumber(GalNumber.RIJN_MOD); + + gn_geheim.setVal((int) geheim); + + gn_klar = gn_geheim.mult(gn_key_t.inv()).sub(gn_key_s.mod(rijndael_mod)); + + System.out.println("Geheim char: "+geheim+" int "+(int)geheim+" GN Geheim: "+gn_geheim.toHex()+" Klar: "+gn_klar.toHex()); + + return gn_klar.toChar(); + } + + public String encrypt(String klarText) + { + char [] chars = new char[klarText.length()]; + for (int i=0;i 1) { + /*if (b.toInt() == 0) + { + throw new Exception("b became ZERO"); + }*/ + a_new = b; + b_new= a.mod(b); + r1_new=r2; + r2_new=r1.add( ( a.div(b) ).mult(r2) ); + + a=a_new; + b=b_new; + r1=r1_new; + r2=r2_new; + } + + return r2; + } + public GalNumber inv() { + GalNumber result = new GalNumber(); + try { + result = euklid(RIJN_MOD, this); + + } + catch (Exception e) { + //System.out.println(e.getMessage()); + result.setVal(0); + } + return result; + } + public GalNumber add(GalNumber rightOp) { + int sum=0; + sum=this.value ^ rightOp.toInt(); + return new GalNumber(sum); + } + + private int[] reduce(GalNumber rightOp) { + return reduce(rightOp.toInt() ); + } + private int[] reduce(int rightOp) { + + int [] divmod = new int[2]; + divmod[DIV_POS]=0; + divmod[MOD_POS]=this.toInt(); + int shift = 0; + int rightOpMSB=0; + int leftOpMSB=0; + + // Search MSB in right Operand + for (int i = BIT_LUT.length - 1; i >= 0; i--) + { + if ((rightOp & BIT_LUT[i]) != 0) + { + rightOpMSB = i; + break; + } + } + if (this.toInt() == 0) { + divmod[DIV_POS]=0; + divmod[MOD_POS]=0; + return divmod; + } + if (rightOp == 0){ + divmod[DIV_POS]=0; + divmod[MOD_POS]=this.toInt(); + return divmod; + } + do { + // Search MSB in left Operand + for (int i = BIT_LUT.length - 1; i >= 0; i--) + { + if ((divmod[MOD_POS] & BIT_LUT[i]) != 0) + { + leftOpMSB = i; + break; + } + } + if (leftOpMSB >= rightOpMSB) + { + // Align the ro to the MSB of the lp and add this + shift = leftOpMSB - rightOpMSB; + + // Save result vor integral div + divmod[DIV_POS] = divmod[DIV_POS] ^ (0x1 << shift); + + // Next polynom for division + divmod[MOD_POS] = divmod[MOD_POS] ^ (rightOp << shift); + + if (divmod[MOD_POS] == 0) + return divmod; + } + + } while (leftOpMSB>=rightOpMSB); + return divmod; + } + + public GalNumber sub(GalNumber rightOp) { + return new GalNumber(this.add(rightOp)); + } + + public int toInt() { + return this.value; + } + + public String toHex() { + return "'"+Integer.toHexString(this.toInt()).toUpperCase()+"'"; + } + + public String toString() { + return Integer.toString(this.value); + } + + public char toChar() { + return (char) this.toInt(); + } + + public void setVal(int a) { + value=a; + } +} diff --git a/Master/Kryptografie/p2/GalTest.java b/Master/Kryptografie/p2/GalTest.java new file mode 100644 index 0000000..88cb3f6 --- /dev/null +++ b/Master/Kryptografie/p2/GalTest.java @@ -0,0 +1,71 @@ +package krypto; +import java.util.Random; + +public class GalTest { + private int testSize; + private long startTime; + private long finishTime; + + private GalNumber[] galNumbers; + + public GalTest() { + this.setTestSize(1000); + this.init(); + } + + public GalTest(int testSize) { + this.setTestSize(testSize); + this.init(); + } + + public void init() { + galNumbers = new GalNumber[testSize]; + Random rnd = new Random(); + if (galNumbers != null) { + for (int i=0;i