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