A := [ 'A', 'B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z', ',' , '.','!','?', ' ']; NumbersToText := function(L,alphabet) return(Apply(L, i-> alphabet[i+1])); end; TextToNumbers := function(text,alphabet) return(Apply(List(text), i-> (Position(alphabet,i)-1))); end; AffinLinear := function(M, key,alphabet) return(NumbersToText( List( Apply(List(key[1]*M + key[2]), i-> Element(Integers(),i) mod Length(alphabet)) ), alphabet)); end; E := function(key, M) local l,n,alphabet; alphabet := A; n := Length(List(key[2])); l := ListSplit(M,n); l := Apply(l, i-> Append(i, Apply([Length(i)+1..n], j-> alphabet[1]))); l := Apply(l, i-> AffinLinear(Transpose(Matrix(Z,1,n,TextToNumbers(i,alphabet))), key, alphabet)); return(Concatenation(l)); end; D := function(key, C) local l,n,k,M,b,alphabet; alphabet := A; n := Length(List(key[2])); l := ListSplit(C,n); k := FiniteField(31,1); M := Matrix(k, n,n, Apply(List(key[1]), i-> Element(k,i))); b := Apply(List(key[2]), i-> Element(k,i)); l := Apply(l, i-> AffinLinear(Transpose(Matrix(k,1,n,TextToNumbers(i,alphabet))), [M^(-1),Transpose(Matrix(k,1,n,-b))] , alphabet)); return(Concatenation(l)); end; ########### Beisipiele: N := Matrix(Z, 4,4, Apply([1..16], i-> 0)); I4 := Identity(Parent(N)); b := Transpose(Matrix(Z, 1,4, [1,2,3,4])); key := [ I4, b]; M := "DIESER TEXT SOLL VERSCHLUESSELT WERDEN";