]> git.leopard-lacewing.eu Git - crypt.git/commitdiff
ab Serie 02 Skripte hochgeladen...
authortreecity <treecity@6904cdf7-2833-49b9-980b-463876255000>
Tue, 13 Apr 2010 06:46:42 +0000 (06:46 +0000)
committertreecity <treecity@6904cdf7-2833-49b9-980b-463876255000>
Tue, 13 Apr 2010 06:46:42 +0000 (06:46 +0000)
vig
lin
base

ascii 2 num <-
invA
prime
faktorisieren (sqmult lrexp)

git-svn-id: https://drops.fb12.tu-berlin.de/svn/crypt/trunk@2 6904cdf7-2833-49b9-980b-463876255000

14 files changed:
analyse2.m [new file with mode: 0644]
ascii2num.m [new file with mode: 0644]
baseDecode.m [new file with mode: 0644]
baseEncode.m [new file with mode: 0644]
decodeLin.m [new file with mode: 0644]
decodeVig.m [new file with mode: 0644]
encodeLin.m [new file with mode: 0644]
encodeVig.m [new file with mode: 0644]
genCode.m [new file with mode: 0644]
invA.m [new file with mode: 0644]
lrexp.m [new file with mode: 0644]
num2ascii.m [new file with mode: 0644]
primefak.m [new file with mode: 0644]
sqmult.m [new file with mode: 0644]

diff --git a/analyse2.m b/analyse2.m
new file mode 100644 (file)
index 0000000..b809287
--- /dev/null
@@ -0,0 +1,23 @@
+function analyse2( MATRIX )\r
+%ANALYSE Summary of this function goes here\r
+%   Detailed explanation goes here\r
+\r
+[m,n] = size(MATRIX);\r
+\r
+\r
+\r
+count=zeros(27,4);\r
+for k=1:4\r
+    for i=1:m\r
+        if(MATRIX(i,k)~=-1)\r
+            count(MATRIX(i,k)+1,k)=count(MATRIX(i,k)+1,k)+1;\r
+        end\r
+    end\r
+end\r
+size(count)\r
+\r
+plot(1:27,count(:,1),1:27,count(:,2),1:27,count(:,3),1:27,count(:,4));\r
+legend('Spalte1','Spalte2','Spalte3','Spalte4')\r
+\r
+end\r
+\r
diff --git a/ascii2num.m b/ascii2num.m
new file mode 100644 (file)
index 0000000..be8d927
--- /dev/null
@@ -0,0 +1,20 @@
+function [CODE] = ascii2num(TEXT,BASE)\r
+%ASCII2NUM Summary of this function goes here\r
+%   Detailed explanation goes here\r
+phase1= cast(TEXT,'int32');\r
+\r
+\r
+phase1(phase1>=cast('a','int32'))=phase1(phase1>=cast('a','int32'))-cast('a','int32');\r
+phase1(phase1>=cast('A','int32'))=phase1(phase1>=cast('A','int32'))-cast('A','int32');\r
+\r
+phase1(phase1==32)=26;\r
+%phase1(phase1==44)=27;\r
+%phase1(phase1==46)=28;\r
+%phase1(phase1==58)=29;\r
+%phase1(phase1==59)=30;\r
+\r
+phase1(phase1>=BASE)=0;\r
+\r
+CODE=phase1;\r
+end\r
+\r
diff --git a/baseDecode.m b/baseDecode.m
new file mode 100644 (file)
index 0000000..8a24752
--- /dev/null
@@ -0,0 +1,12 @@
+function n = baseDecode( c, BASE )\r
+% Dekodiert eine Zahl c zu der Basis BASE\r
+% (Vektor) [0 1 0 1 1 0] zb\r
+% aus einer Aufgabe der Serie 1\r
+\r
+\r
+n = c(1);\r
+for i = 2:length(c)\r
+    n = n*BASE + c(i);\r
+end\r
+\r
+end\r
diff --git a/baseEncode.m b/baseEncode.m
new file mode 100644 (file)
index 0000000..cf16ec2
--- /dev/null
@@ -0,0 +1,21 @@
+function n = baseEncode( c , BASE)\r
+% Kodiert eine Natürlichezahl c zu der Basis b \r
+% Zahl in (Vektor) [0 1 0 1 1 0] zb\r
+% aus einer Aufgabe der Serie 1\r
+\r
+%größt möglicher Exponent\r
+exp = floor( log(c) / log(BASE));\r
+%lerer Lösungsvektor\r
+n=zeros(1,exp+1);\r
+%maximalen EXp der Basis bilden\r
+base=BASE^exp;\r
+for e = 1:exp+1\r
+        %multiplikator der aktuellen Basis\r
+        n(e)=floor(c/base);\r
+        %c verkleinern\r
+        c = c - base* n(e);\r
+        %basis um eins verringern\r
+        base=base/BASE;\r
+end\r
+\r
+end\r
diff --git a/decodeLin.m b/decodeLin.m
new file mode 100644 (file)
index 0000000..7c21e16
--- /dev/null
@@ -0,0 +1,30 @@
+function sol = decodeLin( CODE , a ,b )\r
+%Entschlüsselt den Code mittels Linearer Verschlüsselung\r
+\r
+%Definitionen\r
+BASE = 27;\r
+FILTER = 0:26;\r
+%Inverses A\r
+ainv = find(mod([1:BASE-1]*a,BASE)==1);\r
+%Inverse Funktion\r
+f = @(x) mod((x-b)*ainv , BASE);\r
+\r
+%Konvertieren in Zahlen\r
+ascii = ascii2num(CODE,BASE);\r
+\r
+%Auf welche Soll die Funktion angwendet werden (Zusatz um symb auszulassen)\r
+wich=zeros(1,length(ascii));\r
+for i=1:length(FILTER)\r
+    wich=wich+(ascii==FILTER(i));\r
+end\r
+wich = find(wich);\r
+\r
+\r
+%Funktion anwenden\r
+ascii(wich) = f(ascii(wich));\r
+\r
+\r
+%Konvertieren in Buchstaben\r
+sol = num2ascii(ascii);\r
+end\r
+\r
diff --git a/decodeVig.m b/decodeVig.m
new file mode 100644 (file)
index 0000000..07d521c
--- /dev/null
@@ -0,0 +1,24 @@
+function TEXT = decodeVig(CHIFF,CODE,BASE)\r
+% Entschlüsselt den Text nach Viginére\r
+\r
+% in Zahlen umwandeln\r
+chifN=ascii2num(CHIFF,BASE);\r
+%Längen des Text und des Codes\r
+n=length(chifN);\r
+b=length(CODE);\r
+%multiplikator für den Block\r
+d=ceil(n/b)+1;\r
+\r
+%Code aufblähen auf Textlänge\r
+min=repmat(ascii2num(CODE,BASE),1,d);\r
+min=min(1:n);\r
+\r
+%Text Entschlüsseln\r
+chifC = mod(chifN-min,BASE);\r
+\r
+%Text in ASCII umwandeln\r
+TEXT=num2ascii(chifC);\r
+\r
+end\r
+\r
+\r
diff --git a/encodeLin.m b/encodeLin.m
new file mode 100644 (file)
index 0000000..6e6972d
--- /dev/null
@@ -0,0 +1,27 @@
+function sol = encodeLin( TEXT , a ,b )\r
+%Verschlüsselt den Text mittels linearer Verschlüsselung\r
+\r
+%Definitionen\r
+BASE = 27;\r
+FILTER = 0:26;\r
+\r
+%Funktion\r
+f = @(x) mod(a*x+b , BASE);\r
+\r
+%Konvertieren in Zahlen\r
+ascii = ascii2num(TEXT,BASE);\r
+\r
+%Auf welche Soll die Funktion angwendet werden (Zusatz um symb auszulassen)\r
+wich=zeros(1,length(ascii));\r
+for i=1:length(FILTER)\r
+    wich=wich+(ascii==FILTER(i));\r
+end\r
+wich = find(wich);\r
+\r
+%Funktion anwenden\r
+ascii(wich) = f(ascii(wich));\r
+\r
+%Konvertieren in Buchstaben\r
+sol = num2ascii(ascii);\r
+end\r
+\r
diff --git a/encodeVig.m b/encodeVig.m
new file mode 100644 (file)
index 0000000..249add2
--- /dev/null
@@ -0,0 +1,23 @@
+function CHIFF = encodeVig(TEXT,CODE,BASE)\r
+% Verschlüsselt den Text nach Viginére\r
+\r
+% in Zahlen umwandeln\r
+chifN=ascii2num(TEXT,BASE);\r
+%Längen des Text und des Codes\r
+n=length(chifN);\r
+b=length(CODE);\r
+%multiplikator für den Block\r
+d=ceil(n/b)+1;\r
+\r
+%Code aufblähen auf Textlänge\r
+add=repmat(ascii2num(CODE,BASE),1,d);\r
+add=add(1:n);\r
+\r
+%Text verschlüsseln\r
+chifC = mod(chifN+add,BASE);\r
+\r
+%TEXT in ASCII umwandeln\r
+CHIFF=num2ascii(chifC);\r
+\r
+end\r
+\r
diff --git a/genCode.m b/genCode.m
new file mode 100644 (file)
index 0000000..3a60470
--- /dev/null
+++ b/genCode.m
@@ -0,0 +1,14 @@
+function code = genCode(len,s,n)\r
+%GENCODE Summary of this function goes here\r
+%   Detailed explanation goes here\r
+code = zeros(1,len+1);\r
+\r
+code(1) = s;\r
+\r
+for i = 2:len+1\r
+\r
+    code(i) = mod (code(i-1)^2,n);\r
+\r
+end\r
+code = mod(code(2:len+1),2);\r
+end
\ No newline at end of file
diff --git a/invA.m b/invA.m
new file mode 100644 (file)
index 0000000..4db3043
--- /dev/null
+++ b/invA.m
@@ -0,0 +1,31 @@
+function [inv mat] = invA( a , base)\r
+%INVA Summary of this function goes here\r
+%   Detailed explanation goes here\r
+\r
+loop=1;\r
+z=1;\r
+\r
+mat=[base,a,floor(base/a),0,1];\r
+\r
+\r
+\r
+while(loop==1)\r
+    z=z+1;\r
+    \r
+    mat(z,1)=mat(z-1,2);\r
+    mat(z,2)=mat(z-1,1)-mat(z-1,2)*mat(z-1,3);\r
+    mat(z,3)=floor(mat(z,1)/mat(z,2));\r
+    mat(z,4)=mat(z-1,5);\r
+    mat(z,5)=mat(z-1,4)-mat(z-1,3)*mat(z-1,5);\r
+    if(mat(z,2)==1)\r
+        loop=0;\r
+    end\r
+end\r
+\r
+%mat\r
+\r
+inv=mod(mat(z,5),base);\r
+\r
+\r
+end\r
+\r
diff --git a/lrexp.m b/lrexp.m
new file mode 100644 (file)
index 0000000..9e52362
--- /dev/null
+++ b/lrexp.m
@@ -0,0 +1,33 @@
+function [y mat] = lrexp(x,k,base,op,neut)\r
+% x^k in (base,op,neut) mit x in base und k in N\r
+\r
+\r
+y = neut;\r
+\r
+m = 1;\r
+while(m<=k)\r
+    m = m*2;\r
+end\r
+\r
+\r
+mat = [y,k,m];\r
+z = 1;\r
+\r
+while(m~=1)\r
+    m = m/2;\r
+    eval( ['y = y ',op,' y;']);y= mod(y,base);\r
+    \r
+    if(k>=m)\r
+        k=k-m;\r
+        eval( ['y = y ',op,' x;']);y= mod(y,base);\r
+        \r
+    end\r
+       \r
+    z=z+1;\r
+    mat(z,:)=[y,k,m];\r
+end\r
+\r
+mat\r
+\r
+end\r
+\r
diff --git a/num2ascii.m b/num2ascii.m
new file mode 100644 (file)
index 0000000..b032148
--- /dev/null
@@ -0,0 +1,17 @@
+function [TEXT] = ascii2num(CODE)\r
+%ASCII2NUM Summary of this function goes here\r
+%   Detailed explanation goes here\r
+phase1= CODE;\r
+\r
+\r
+phase1(phase1<26)=phase1(phase1<26)+cast('A','int32');\r
+\r
+phase1(phase1==26)=32;\r
+% phase1(phase1==27)=44;\r
+% phase1(phase1==28)=46;\r
+% phase1(phase1==29)=58;\r
+% phase1(phase1==30)=59;\r
+\r
+TEXT=char(phase1);\r
+end\r
+\r
diff --git a/primefak.m b/primefak.m
new file mode 100644 (file)
index 0000000..14f4fe8
--- /dev/null
@@ -0,0 +1,20 @@
+function primed = primefak(base)\r
+\r
+\r
+prime = primes(base);\r
+\r
+z=1;\r
+\r
+rest=base;\r
+\r
+primed =[];\r
+\r
+while(rest~=1)\r
+    if(mod(rest,prime(z))==0)\r
+        primed = [primed prime(z)];\r
+        rest = rest/prime(z);\r
+    else\r
+        z=z+1;\r
+    end\r
+\r
+end
\ No newline at end of file
diff --git a/sqmult.m b/sqmult.m
new file mode 100644 (file)
index 0000000..cd0900e
--- /dev/null
+++ b/sqmult.m
@@ -0,0 +1,26 @@
+function [y mat] = sqmult(x,k,base,op,neut)\r
+% x^k in (base,op,neut) mit x in base und k in N\r
+\r
+\r
+y = neut;\r
+\r
+mat = [y,x,k];\r
+z = 1;\r
+\r
+while(k~=0)\r
+    if(mod(k,2)==1)\r
+        eval( ['y = y ',op,' x;']);y= mod(y,base);\r
+        \r
+    end\r
+    \r
+    eval( ['x = x ',op,' x;']);x= mod(x,base);\r
+    k = floor(k/2);\r
+    \r
+    z=z+1;\r
+    mat(z,:)=[y,x,k];\r
+end\r
+\r
+mat\r
+\r
+end\r
+\r