[Contest] Crittografia

« Older   Newer »
  Share  
BiOs93
CAT_IMG Posted on 1/7/2011, 16:10     +1   -1




Vorrei richiamare il contest di FrontBack a cui nessuno ha partecipato.
Il contest chiede solo di creare un programma che cripta e uno che lo decripta.

Restrizioni:
-Nessuna

Requisiti minimi programma:
-criptazione e decriptazione di un file
-uso di una chiave(la password)
-soluzione semplice ma efficace

Fine del contest 25/07/2011

Spero partecipiate in tanti.

Edited by BiOs93 - 1/7/2011, 20:26
 
Top
FrontBack
CAT_IMG Posted on 1/7/2011, 16:18     +1   -1




CITAZIONE (BiOs93 @ 1/7/2011, 17:10) 
Vorrei richiamare il contest di FrontBack a cui nessuno a partecipato.
Il contest chiede solo di creare un programma che cripta e uno che lo decripta.

Restrizioni:
-Nessuna

Fine del contest 25/07/2011

Spero partecipiate in tanti.

già... sigh... :cry:
 
Top
xMasteRx
CAT_IMG Posted on 1/7/2011, 18:55     +1   -1




beh ma creare un contest senza alcuna restrizione non basta... devi dire per usare un algoritmo proprio che include o no password o qualcosa del genere...
 
Top
FrontBack
CAT_IMG Posted on 1/7/2011, 19:53     +1   -1




toh che bello, ho già l'algoritmo pronto. basta che lo implemento e sono a posto XD

Edited by FrontBack - 1/7/2011, 21:22
 
Top
LoGiX
CAT_IMG Posted on 2/7/2011, 23:44     +1   -1




@Front: LOL =D
Penso di partecipare.. il linguaggio qualsiasi? :D
 
Top
BiOs93
CAT_IMG Posted on 3/7/2011, 11:17     +1   -1




si nessuna restrizione
 
Top
FrontBack
CAT_IMG Posted on 3/7/2011, 17:50     +1   -1




@LoGiX: che c'è? sono previdente, io! XD
 
Top
LoGiX
CAT_IMG Posted on 4/7/2011, 12:04     +1   -1




@Front: XD
In un paio di giorni (oppure stasera se riesco) lo posto :D
 
Top
FrontBack
CAT_IMG Posted on 23/7/2011, 15:27     +1   -1




Ce l'ho fatta! Converte testo e file.

Funziona così: c'è questo algoritmo che dal codice ASCII di ogni carattere riesce a criptarlo, grazie a una chiave pubblica casuale generata alla criptazione. Senza di essa non si può decriptare il testo. Per trasmettere dei dati criptati si deve comunicarla al destinatario.

BUG NOTI:
-Per scegliere il file di destinazione è necessario aggiungerci anche l'estensione indicata per funzionare (i file criptati vanno con estensione .fbenc, quelli decriptati con l'estensione indicata nel menù a tendina)

Ecco, sono due file, vanno con questo nome:

Algorythm.au3
CODICE
#include <String.au3>
#include <Array.au3>

; Algoritmo

Func _SAEncrypt($sText)
       $arr = StringToASCIIArray($sText)
       $str = _ArrayToString($arr)
       $spl = StringSplit($str, "|")
       $a = Number(Random(10, 99, 1))
       $p = Number($a*2*($a^2+($a*2)^2))
       $rev = Number(_StringReverse($a))
       $v = Number((($p/$a*$rev)^2)/$p)
       $ret = ""
       For $i = 1 To $spl[0] Step 1
               $exp = Number($v*$p*Number($spl[$i]))
               If $i = $spl[0] Then
                       $sep = ""
               Else
                       $sep = " "
               EndIf
               $ret &= Number($exp/(10*($a^2)))&$sep
       Next
       $array = $ret&"|"&$p
       Return StringSplit($array, "|")
EndFunc

Func _SADecrypt($sText, $sPubKey)
       $a = _RealRoot(Number($sPubKey/10), 3)
       $spl = StringSplit($sText, " ")
       $ret = ""
       For $i2 = 1 To $spl[0] Step 1
               $vpx = Number($spl[$i2]*(10*($a^2)))
               $rev = Number(_StringReverse($a))
               $v = Number((($sPubKey/$a*$rev)^2)/$sPubKey)
               $vp = Number($v*$sPubKey)
               $x = Number($vpx/$vp)
               $ret &= Chr(Round($x))
       Next
       Return $ret
EndFunc

; #INDEX# ========================================================================================================================
; Title .........: Math root
; AutoIt Version : 3.3.0.0 / 3.3.1.1
; Language ......: English
; Description ...: Deals with the nth root, including negative numbers.
; Author(s) .....: MDiesel
; ================================================================================================================================

; #FUNCTION# =====================================================================================================================
; Name...........: _RealRoot
; Description ...: Finds the real nth root of a number, including negatives.
; Syntax.........: _RealRoot($fNum, $nExp = 3)
; Parameters ....: $fNum       - The Number
;                  $nExp       - The root.
; Return values .: On Success: = Returns the result.
;                  On Failure: = Sets @Error and returns 0, which can be a valid responce, so check @Error first.
;                  @ERROR:     = 0 = No error.
;                                1 - Result is an imaginay number
; Author ........: MDiesel
; Remarks .......:
; Example .......: ConsoleWrite("Normal = " & -27^(1/3) & @CRLF & "_RealRoot  = " & _RealRoot(-27, 3))
; ================================================================================================================================

Func _RealRoot($fNum, $nExp = 3)
  Local $bNeg = False, $fRet = 0
  If $nExp < 0 Then Return SetError (1, 0, $fNum)

  If $fNum < 0 Then ; is negative
     If Mod($nExp, 2) Then ; nExp is odd, so negative IS possible.
        $bNeg = True
        $fNum *= -1
     Else
        Return SetError(1, 0, $fNum & "i") ; Imaginary number.
     EndIf
  EndIf

  $fRet = $fNum ^ (1 / $nExp)
  If $bNeg Then $fRet *= -1
  Return $fRet
EndFunc ; ==> _RealRoot


Main.au3
CODICE
; #################
; #  FBEncrypter  #
; #  By FrontBack #
; #################

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include "Algorythm.au3"

Dim $szDrive, $szDir, $szFName, $szExt

$Form1 = GUICreate("FBEncrypter", 684, 487, 192, 124)
$Tab1 = GUICtrlCreateTab(8, 32, 673, 449)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("Testo")
$Label4 = GUICtrlCreateLabel("Testo da decriptare:", 362, 65, 99, 17)
$Edit2 = GUICtrlCreateEdit("", 466, 65, 201, 161)
$Label5 = GUICtrlCreateLabel("Chiave pubblica:", 378, 233, 83, 17)
$Input2 = GUICtrlCreateInput("", 466, 231, 201, 21)
$Edit3 = GUICtrlCreateEdit("", 465, 260, 201, 161, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL))
$Label6 = GUICtrlCreateLabel("Testo decriptato:", 377, 260, 84, 17)
$Edit1 = GUICtrlCreateEdit("", 124, 67, 201, 161)
$Label2 = GUICtrlCreateLabel("Chiave pubblica:", 36, 235, 83, 17)
$Edit4 = GUICtrlCreateEdit("", 123, 262, 201, 161, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL))
$Label3 = GUICtrlCreateLabel("Testo criptato:", 45, 262, 72, 17)
$Input1 = GUICtrlCreateInput("", 124, 233, 201, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
GUICtrlSetTip(-1, "Comunica questo codice al destinatario e faglielo inserire nell'apposito campo per decriptare il testo.")
$Label7 = GUICtrlCreateLabel("Testo da criptare:", 30, 67, 87, 17)
$Button1 = GUICtrlCreateButton("Cripta!", 16, 448, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Decripta!", 597, 448, 75, 25, $WS_GROUP)
$TabSheet2 = GUICtrlCreateTabItem("File")
$Label8 = GUICtrlCreateLabel("File da criptare:", 24, 64, 76, 17)
$Input3 = GUICtrlCreateInput("", 104, 62, 185, 21)
$Button3 = GUICtrlCreateButton("Sfoglia...", 296, 60, 75, 25, $WS_GROUP)
$Label9 = GUICtrlCreateLabel("Chiave pubblica:", 16, 90, 83, 17)
$Input4 = GUICtrlCreateInput("", 104, 88, 185, 21, BitOR($ES_AUTOHSCROLL,$ES_READONLY))
GUICtrlSetTip(-1, "Comunica questo codice al destinatario e faglielo inserire nell'apposito campo per decriptare il testo.")
$Label10 = GUICtrlCreateLabel("Destinazione file:", 16, 115, 84, 17)
$Input5 = GUICtrlCreateInput("", 104, 113, 185, 21)
$Button4 = GUICtrlCreateButton("Sfoglia...", 296, 110, 75, 25, $WS_GROUP)
$Button5 = GUICtrlCreateButton("Cripta!", 24, 144, 75, 25, $WS_GROUP)
$Label11 = GUICtrlCreateLabel("File da decriptare:", 16, 189, 88, 17)
$Input6 = GUICtrlCreateInput("", 104, 187, 185, 21)
$Button6 = GUICtrlCreateButton("Sfoglia...", 296, 185, 75, 25, $WS_GROUP)
$Label12 = GUICtrlCreateLabel("Chiave pubblica:", 16, 215, 83, 17)
$Input7 = GUICtrlCreateInput("", 104, 213, 185, 21)
GUICtrlSetTip(-1, "Comunica questo codice al destinatario e faglielo inserire nell'apposito campo per decriptare il testo.")
$Label13 = GUICtrlCreateLabel("Destinazione file:", 16, 240, 84, 17)
$Input8 = GUICtrlCreateInput("", 104, 238, 185, 21)
$Button7 = GUICtrlCreateButton("Sfoglia...", 296, 235, 75, 25, $WS_GROUP)
$Button8 = GUICtrlCreateButton("Decripta!", 24, 269, 75, 25, $WS_GROUP)
GUICtrlCreateTabItem("")
$Label1 = GUICtrlCreateLabel("Cripta/Decripta:", 8, 8, 79, 17)
GUISetState(@SW_SHOW)

While 1
       $nMsg = GUIGetMsg()
       Switch $nMsg
               Case $GUI_EVENT_CLOSE
                       Exit
               Case $Button1
                       $Text = GUICtrlRead($Edit1)
                       If $Text = "" Then
                               MsgBox(16, "FBEncrypter", "Inserisci prima il testo da criptare!")
                       Else
                               $encrypt = _SAEncrypt($Text)
                               GUICtrlSetData($Edit4, $encrypt[1])
                               GUICtrlSetData($Input1, $encrypt[2])
                       EndIf
               Case $Button2
                       $Text = GUICtrlRead($Edit2)
                       $PubKey = GUICtrlRead($Input2)
                       If $Text = "" Or $PubKey = "" Then
                               MsgBox(16, "FBEncrypter", "Devi prima inserire il testo da decriptare e/o la chiave pubblica!")
                       Else
                               $decrypt = _SADecrypt($Text, $PubKey)
                               GUICtrlSetData($Edit3, $decrypt)
                       EndIf
               Case $Button3
                       $Open = FileOpenDialog("Seleziona il file da criptare", @DesktopDir, "Tutti i file (*.*)")
                       GUICtrlSetData($Input3, $Open)
               Case $Button4
                       $Save = FileSaveDialog("Seleziona la destinazione del file (metti l'estensione!)", @DesktopDir, "File criptato (*.fbenc)")
                       GUICtrlSetData($Input5, $Save)
               Case $Button5
                       If GUICtrlRead($Input3) = "" Or Not FileExists(GUICtrlRead($Input3)) Or GUICtrlRead($Input5) = "" Then
                               MsgBox(16, "FBEncrypter", "Devi prima inserire un file da criptare, esso non esiste o non c'è nessun file di destinazione inserito!")
                       Else
                               $fOpen = FileOpen(GUICtrlRead($Input3), 16)
                               $read = FileRead($fOpen)
                               $encrypt = _SAEncrypt($read)
                               _FileCreate(GUICtrlRead($Input5))
                               $spl = _PathSplit(GUICtrlRead($Input3), $szDrive, $szDir, $szFName, $szExt)
                               $fOpen = GUICtrlRead($Input5)
                               FileWrite($fOpen, $spl[4]&"|"&$encrypt[1])
                               GUICtrlSetData($Input4, $encrypt[2])
                               MsgBox(64,"FBEncrypter","Il file è stato criptato con successo!")
                       EndIf
               Case $Button6
                       $Open = FileOpenDialog("Seleziona il file da decriptare", @DesktopDir, "File criptato (*.fbenc)")
                       GUICtrlSetData($Input6, $Open)
               Case $Button7
                       If $Open = "" Then
                               MsgBox(16, "FBEncrypter", "Devi prima inserire un file da decriptare!")
                       Else
                               $read = FileRead(GUICtrlRead($Input6))
                               $spl = StringSplit($read, "|")
                               $Save = FileSaveDialog("Seleziona la destinazione del file", @DesktopDir, "File "&$spl[1]&" (*"&$spl[1]&")")
                               GUICtrlSetData($Input8, $Save)
                       EndIf
               Case $Button8
                       If GUICtrlRead($Input6) = "" Or Not FileExists(GUICtrlRead($Input6)) Or GUICtrlRead($Input8) = "" Or GUICtrlRead($Input7) = "" Then
                               MsgBox(16, "FBEncrypter", "Devi prima inserire un file da decriptare, esso non esiste, non è stata immessa una chiave pubblica o non c'è nessun file di destinazione inserito!")
                       Else
                               $spl = StringSplit(FileRead(GUICtrlRead($Input6)), "|")
                               $decrypt = _SADecrypt($spl[2], GUICtrlRead($Input7))
                               If FileExists(GUICtrlRead($Input8)) Then
                                       FileDelete(GUICtrlRead($Input8))
                                       _FileCreate(GUICtrlRead($Input8))
                                       FileWrite(GUICtrlRead($Input8), BinaryToString($decrypt))
                                       MsgBox(64,"FBEncrypter","Il file è stato decriptato con successo!")
                               Else
                                       _FileCreate(GUICtrlRead($Input8))
                                       $fOpen = GUICtrlRead($Input8)
                                       FileWrite($fOpen, $decrypt)
                                       MsgBox(64,"FBEncrypter","Il file è stato decriptato con successo!")
                               EndIf
                       EndIf
       EndSwitch
WEnd
 
Top
LoGiX
CAT_IMG Posted on 23/7/2011, 17:20     +1   -1




Bravo, io non ho la minima idea di dove cominciare xD
 
Top
xMasteRx
CAT_IMG Posted on 23/7/2011, 18:54     +1   -1




bravo frontback ;)
 
Top
I.Ren
CAT_IMG Posted on 24/7/2011, 09:34     +1   -1




Non avevo niente da fare ieri sera, l'ho fatto pure io.

Esempio di funzionamento:

CITAZIONE
pietro@UBUNTU-pietro:~/Scrivania/Python/cript$ python ir_cript.py
Stringa originale: passiuot
Stringa criptata: 1075178895709814784931181722177250304z110397833041632768011039783304163276801007980214727951360112317795355400294410655790841409771521113578141985165312
Stringa decriptata: passiuot
Chiave: 9599811568837632

Codice su pastebin: http://pastebin.com/T0xrN5yL
Codice sul forum:
CODICE
import math, random, string, re

class ir_cript:
 def cript(self,stringa):
   app = ""
   elabora = ""
   ret = []
   chiave = (random.randrange(500,2000,2) ** 5)
   
   for i in range(len(stringa)):
       elabora = str(ord(stringa[i])*chiave)
       app += elabora
       app += ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase) for x in range(19-len(elabora)))
   ret.append(app)
   ret.append(chiave)
   return ret
 
 def decript(self,stringa,chiave):
   ret = ""
   chunck = ""
   c2 = 19
   for i in range(len(stringa)/19):
     chunck = stringa[c2-19:c2]
     pnum = re.sub("[^0-9]","",chunck)
     try:
       mchiave = long(pnum) / chiave
       ret += chr(mchiave)
     except:
       pass
     c2 += 19
   
   return ret

stringa = "passiuot"
init = ir_cript()
cripta = init.cript(stringa)
decripta = init.decript(cripta[0],cripta[1])
print "Stringa originale: "+stringa+"\nStringa criptata: "+str(cripta[0])+"\nStringa decriptata: "+decripta+"\nChiave: "+str(cripta[1])+"\n"


Pseudocodice:
Cripta:

CODICE
genera una chiave casuale compresa tra 500 e 2000 elevato alla 5
per ogni carattere della stringa:
  prendi il valore ascii del carattere e moltiplicalo per la chiave; se il numero delle cifre       risultatnte è minore di 19, aggiungi caratteri casuali fino a 19

ritorna un'array con la chiave e la stringa criptata


Decripta:

CODICE
dividi la stringa criptata in blocchi da 19 cifre l'uno.
per ogni blocco:
  dividi per la chiave e cambia il codice ascii in carattere

ritorna la stringa decriptata


Commenti? : D
 
Top
FrontBack
CAT_IMG Posted on 24/7/2011, 13:08     +1   -1




ma... se le cifre sono minori di 19 vengono aggiunti caratteri casuali, no?
e allora per decriptare come si separano dal numero originale?
questa parte non l'ho capita bene... :|
 
Top
I.Ren
CAT_IMG Posted on 24/7/2011, 13:38     +1   -1




ah si mi son dimenticato di scriverlo, le lettere vengono tolte in fase di decriptazione.
 
Top
BiOs93
CAT_IMG Posted on 25/7/2011, 19:27     +1   -1




Ecco la mia soluzione in pratica viene praticata una XOR su ogni carattere più un carattere casuale ogni chiave/2 (dove chiave è la chiave pubblica).

Codice
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int crypt(char* fn,int chiave);
int decrypt(char* fn,int chiave);

void main()
{
int ris,chiave;
char f[256];
while(1)
{
system("cls");
printf("Menu\n1.Cripta\n2.Decripta\n");
scanf("%d",&ris);
fflush(stdin);
switch(ris)
{
case 1:
printf("Inserire il nome del file da criptare:\n");
gets(f);
printf("Inserire la chiave:\n");
scanf("%d",&chiave);
crypt(f,chiave);
break;
case 2:
printf("Inserire il nome del file da decriptare\n");
gets(f);
printf("Inserire la chiave:\n");
scanf("%d",&chiave);
decrypt(f,chiave);
break;
default:
printf("Il comando inserito non e' valido\nPremi un tasto per continuare...\n");
fflush(stdin);
getchar();
break;
}
}
}

int crypt(char* fn,int chiave)
{
int j=0,limit=abs(chiave>>2),c;
FILE *in,*out;
in=fopen(fn,"r");
if(in==NULL)
{
printf("Il file non esiste\n");
fflush(stdin);
getchar();
return -1;
}
out=fopen("crypt.txt","w");
srand(time(NULL));
while(c != EOF)
{
c = fgetc(in);
if(c!=EOF){
fputc(c^chiave,out);
}
j++;
if(j==limit)
{
fputc(rand()%255,out);
j=0;
}
}
fclose(in);
fclose(out);
return 1;
}

int decrypt(char* fn,int chiave)
{
int j=0,limit=abs(chiave>>2),c;
FILE *in,*out;
in=fopen(fn,"r");
if(in==NULL)
{
printf("Il file non esiste\n");
fflush(stdin);
getchar();
return -1;
}
out=fopen("decrypt.txt","w");
while(c != EOF)
{
c = fgetc(in);
if(c!=EOF){
fputc(c^chiave,out);
}
j++;
if(j==limit)
{
fgetc(in);
j=0;
}
}
fclose(in);
fclose(out);
return 1;
}
 
Top
16 replies since 1/7/2011, 16:10   492 views
  Share