From: treecity Date: Tue, 13 Apr 2010 06:46:42 +0000 (+0000) Subject: ab Serie 02 Skripte hochgeladen... X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=45af8ba627ded951d86409b4981566dfeec024c6;p=crypt.git 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 --- 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 +