<?xml version="1.0" encoding="UTF-8"?>
<Worksheet><Version major="6" minor="0"/><View-Properties><Zoom percentage="150"/></View-Properties><Styles><Layout alignment="left" bullet="none" firstindent="0.0" leftmargin="0.0" linebreak="space" name="Normal" rightmargin="0.0" spaceabove="0.0" spacebelow="0.0"/><Layout alignment="centred" bullet="none" linespacing="0.5" name="Maple Output"/><Font background="[0,0,0]" bold="false" family="Times New Roman" foreground="[0,0,0]" italic="false" name="Text" opaque="false" size="12" underline="false"/><Font background="[0,0,0]" family="Times New Roman" foreground="[0,0,255]" name="2D Output" opaque="false" readonly="true" size="12"/><Font background="[0,0,0]" bold="true" executable="true" family="Monospaced" foreground="[255,0,0]" name="Maple Input" opaque="false" size="12"/></Styles><Group><Input><Text-field alignment="centred" layout="Normal" style="Text"><Font bold="true" executable="false" family="Trebuchet MS" size="24">Protocollo di crittografia RSA</Font>
</Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Text"/><Text-field layout="Normal" style="Text"><Font bold="true" executable="false" size="14">Conversione testo (stringa) &lt;-&gt; numeri (lista)</Font></Text-field><Text-field layout="Normal" style="Text"/></Input></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Definizione dell'alfabeto</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">Alphabet:=" ABCDEFGHIJKLMNOPQRSTUVWXYZ";</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSlBbHBoYWJldEc2IlE8fkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaRiU=</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Procedure di conversione</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">StringToList := proc(text::string)
    local i;
    global Alphabet;
    [seq(SearchText(text[i],Alphabet)-1, i=1..length(text))];
  end:</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">ListToString := proc(numlist::list(nonnegint))
    local i;
    global Alphabet;
    cat(seq(Alphabet[numlist[i]+1], i=1..nops(numlist)));
  end:</Text-field></Input></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Messaggio da inviare convertito in lista</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">S:="CIAO A TUTTI";</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJTRzYiUS1DSUFPfkF+VFVUVElGJQ==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">L:=StringToList(S);</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJMRzYiNy4iIiQiIioiIiIiIzoiIiFGKUYrIiM/IiNARixGLEYo</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"/><Text-field layout="Normal" style="Text"><Font bold="true" executable="false" size="14">Codifica del messaggio (la list) in un numero</Font></Text-field><Text-field layout="Normal" style="Text"/></Input></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Conversione in base 10 per generare il numero <Font italic="true">M</Font> definito via la lista in base 27</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">M:=sum(L[k]*27^(nops(L)-k), k=1..nops(L));</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJNRzYiIjIkUkd2S2s/YT0=</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Numero di cifre di <Font italic="true">M</Font></Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">z:=floor(evalf(log[10](M)+1));</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJ6RzYiIiM8</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"/><Text-field layout="Normal" style="Text"><Font bold="true" size="14">Generazione delle chiavi</Font></Text-field><Text-field layout="Normal" style="Text"/></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">with(numtheory):</Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">n1:=rand(</Font>10^round(z/2)..10^round(z/2+1)<Font italic="false" underline="false">)();</Font></Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSNuMUc2IiIrbDtkSSUp</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input"><Font italic="false" underline="false">n2:=rand(</Font>10^round(z/2)..10^round(z/2+1)<Font italic="false" underline="false">)();</Font></Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSNuMkc2IiIrelIkKSlcKA==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Scelta di p e q e calcolo del modulo (<Font italic="true">n</Font>) e della funzione di Euler</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">p:=nextprime(n1);</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJwRzYiIisicHIwVik=</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">q:=prevprime(n2);</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJxRzYiIituUiQpKVwo</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">n:=p*q;</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJuRzYiIjUoPkclKnBkdFg+Syc=</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">floor(evalf(log[10](n)+1));</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiMiIz8=</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">f:=(p-1)*(q-1);</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJmRzYiIjVTRC1xPE1kJT5LJw==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Calcolo dell'esponente <Font italic="true">e</Font><Font encoding="ISO8859-1"> e verifica della sua coprimalit\340 con </Font><Font italic="true">f</Font></Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">e:=rand(n)();
    while(gcd(e,f) &lt;&gt; 1) do
      e:=rand(3..f/2)();
end:</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJlRzYiIjVOQ0UqXGE2QHZZJQ==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Calcolo di <Font italic="true">d</Font></Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">d:=modp(1/e,f);</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJkRzYiIjVQbWp5OFI3OS9U</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"/><Text-field layout="Normal" style="Text"><Font bold="true" executable="false" size="14">Scambio del messaggio</Font></Text-field><Text-field layout="Normal" style="Text"/></Input></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Codifica</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">C:=Power(M,e) mod n;</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJDRzYiIjRaajAlUjQqUidIRw==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"><Font executable="false">Decodifica</Font></Text-field></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">N:= Power(C,d) mod n;</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSJORzYiIjIkUkd2S2s/YT0=</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" style="Text"/><Text-field layout="Normal" style="Text"><Font bold="true" executable="false" size="14">Conversione del numero nella lista e poi nella stringa del testo</Font></Text-field><Text-field layout="Normal" style="Text"/></Input></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">L1:=convert(N,base,27):
g:= (j) -&gt; L1[nops(L1)-j]:
L3:=[seq( g(j), j=0..nops(L1)-1)];</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiM+SSNMM0c2IjcuIiIkIiIqIiIiIiM6IiIhRilGKyIjPyIjQEYsRixGKA==</Equation></Text-field></Output></Group><Group><Input><Text-field layout="Normal" prompt="&gt; " style="Maple Input">ListToString(L3);</Text-field></Input><Output><Text-field layout="Maple Output" style="2D Output"><Equation style="2D Output">NiNRLUNJQU9+QX5UVVRUSTYi</Equation></Text-field></Output></Group><Text-field/><Text-field/><Text-field/><Text-field/></Worksheet>
