Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Problemozzo con mcrypt

  1. #1

    Problemozzo con mcrypt

    Hola!
    Ho un problema con mcrypt. Premetto che sto usando mcrypt_crypt e _decrypt, senza dover fare open e close.

    Ho fatto questo
    codice:
    file crittatura.php
    
    <?
    	$key = "Chiave assai sicura";
    
    	$iv_size = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_CFB);
    	$iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_RANDOM);
    
    	$ksize = mcrypt_get_key_size('xtea', 'cfb');
    	$key = substr(md5($key), 0, $ksize);
    
    	function Rev_Crypt($text)
    	{
    		global $key, $iv;
    		return mcrypt_encrypt(MCRYPT_XTEA, $key, $text, MCRYPT_MODE_CFB, $iv);
    	}
    
    	function Rev_Decrypt($enc)
    	{
    		global $key, $iv;
    		return mcrypt_decrypt(MCRYPT_XTEA, $key, $enc, MCRYPT_MODE_CFB, $iv);
    	} 
    ?>
    Il problema e' questo:
    Nella pagina A faccio questo:
    codice:
    include("crittatura.php");
    $txt = "Testo da crittare";
    $cri = Rev_Crypt($txt);
    $unc = Rev_Decrypt($cri);
    e noto che $tct e $unc sono uguali, e fin qui giusto

    Poi metto $cri in un database.
    Nella pagina B faccio
    codice:
    include("crittatura.php");
    $cont = Preleva_da_database();
    $unc = Rev_Decrypt($cont);
    ma $unc della pagina B e' una serie di cose senza senso

    Facendo due verifiche vi garantisco che:
    1. il database immagazzina la stringa crittata correttamente, e la restituisce correttamente

    2. La chiave $key nella pagina A e B coincidono, ma non e' cosi' per $iv, suppongo sia normale

    3. La stringa decrittata $unc della pagina B e' sempre diversa

    Ho provato anche il metodo "open-close" (e tutta la pappardella che c'e' attorno, come da manuale), ma il risultato e' lo stesso: incomprensibile.

    Dove sbaglio? :master:
    Grazie
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Il problema credo sia nei caratteri che inserisci nel db.

    Prova ad inserire la stringa con:

    addslashes($cri)

    e quando estrai il dato:

    stripslashes($campo_estratto)


  3. #3
    Oppure faccio un encode_64.
    Il database e' un dba, quindi salva le stringhe in formato testo (credo), su file.

    Provo (anche se comunque avevo l'impressione che le stringhe salvate fossero le stesse!)

    Faccio sapere
    grazie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Originariamente inviato da akiross
    Oppure faccio un encode_64.
    Il database e' un dba, quindi salva le stringhe in formato testo (credo), su file.

    Provo (anche se comunque avevo l'impressione che le stringhe salvate fossero le stesse!)

    Faccio sapere
    grazie
    ciao
    Access non usa \ ccome parser, mi pare usi '

    Comunque ho provato su mysql il tuo script ed il problema quello.
    Bisogna parsare i caratteri ' " \ che possono comparire. il campo deve essere char o varchar BINARY.


  5. #5
    Access??!?!?
    E chi usa Access?!

    DBA li salva su file .db, praticamente sono stringhe in chiaro
    Non dovrebbero esserci problemi per i caratteri, ma ora vedo

    No, comunque non e' un problema di database, come dicevo

    Guarda:

    pagina A stored: (quello che viene messo nel database)
    44iAcUQXy534Trs4dte9azVL/eIPy+Cfk0qzrS7EqFc1KgtGzpGPoNCoZW2nRla7YGU7PS2SR8X qlfwys+sF0lAN
    pagina B stored: (quello che viene preso dal database)
    44iAcUQXy534Trs4dte9azVL/eIPy+Cfk0qzrS7EqFc1KgtGzpGPoNCoZW2nRla7YGU7PS2SR8X qlfwys+sF0lAN
    queste due le tiro fuori da base64, poi le decodifico come dicevo prima, ma il risultato e' sempre strano.

    Cosa puo' essere?
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    .db non so di che si tratti. Ho fatto una prova con il tuo script mettendo il dato su mysql. Ho riscontrato che alcune stringhe ritornavano corrette altre no. Usando addslashes/stripslashes sulla stringa immessa/estratta invece va sempre bene.

    Altro non saprei che dirti. Risultato strano poi non molto significativo.


  7. #7
    Fidati .db sono stringhe in chiaro. Se vai su php.net e cerchi dba vedi cos'e'

    Comunque, so che strano non e' molto signficativo. Ti quoto qualche esecuzione della pagina, cosi' vedi
    IV U2d
    KEEEY SIIZEE 16
    KEEEY: f434ea72e7239c47

    Stored_ record: (quello nel database)
    44iAcUQXy534Trs4dte9azVL/eIPy+Cfk0qzrS7EqFc1KgtGzpGPoNCoZW2nRla7YGU7PS2SR8X qlfwys+sF0lAN
    Crypted record: (dopo un base64_decode)
    ㈀qD˝N8v׽k5KJ_.ĨW5* FΑ ШemFV`e;=-G2P

    Uncrypted record: (questo dovrebbe essere una stringa di testo chiaro, e invece...)
    Jda`یZ6U$D{+QۦDd3*C2o )2VWR 
    e come vedi da questo
    IV J}K
    KEEEY SIIZEE 16
    KEEEY: f434ea72e7239c47
    ....
    Uncrypted record: D8i9a`یZ6U$D{+QۦDd3*C2o )2VWR 
    cambia l'IV e cambia anche quello uncrypted, mentre il resto e' uguale

    Io non capisco proprio cosa possa essere

    Grazie cmq
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  8. #8
    Ho fatto un test: 3 pagine semplici, posto

    pagina cri.php
    codice:
    <?
    	$key = "Chiave assai sicura";
    
    	$iv_size = mcrypt_get_iv_size(MCRYPT_XTEA, MCRYPT_MODE_CFB);
    	$iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_RANDOM);
    
    	$ksize = mcrypt_get_key_size('xtea', 'cfb');
    	$key = substr(md5($key), 0, $ksize);
    
    	function Rev_Crypt($text)
    	{
    		global $key, $iv;
    		return mcrypt_encrypt(MCRYPT_XTEA, $key, $text, MCRYPT_MODE_CFB, $iv);
    	}
    
    	function Rev_Decrypt($enc)
    	{
    		global $key, $iv;
    		return mcrypt_decrypt(MCRYPT_XTEA, $key, $enc, MCRYPT_MODE_CFB, $iv);
    	} 
    ?>
    pagina index.php
    codice:
    <?
    	include("cri.php");
    	$cri = Rev_Crypt("Questa e' Una stringa crittata asdasd");
    	$enc = base64_encode($cri);
    
    	$f = fopen("prova.txt", "w");
    	fputs($f, $enc);
    	fclose($f);
    
    	echo "Stringa salvata: $enc (len ".strlen($enc).")
    \n";
    	echo "Stringa crittata: ".base64_decode($enc)."(len ".strlen(base64_decode($enc)).")
    \n";
    	echo "Stringa decrittata: ".Rev_Decrypt(base64_decode($enc))."(len ".strlen(Rev_Decrypt(base64_decode($enc))).")
    \n";
    	
    	echo "
    
    Leggi
    \n";
    ?>
    pagina read.php
    codice:
    <?
    	include("cri.php");
    	$f = fopen("prova.txt", "r");
    	$enc = fgets($f);
    
    	echo "Stringa salvata: $enc (len ".strlen($enc).")
    \n";
    	echo "Stringa crittata: ".base64_decode($enc)."(len ".strlen(base64_decode($enc)).")
    \n";
    	echo "Stringa decrittata: ".Rev_Decrypt(base64_decode($enc))."(len ".strlen(Rev_Decrypt(base64_decode($enc))).")
    \n";
    
    	fclose($f);
    
    ?>
    teoricamente critta la stringa, la passa con base64, la salva su file.
    Read la legge e fa il processo inverso
    ma i risultati:

    esecuzione di index.php
    Stringa salvata: Rs1baBsfvjfbZpEc/GWv/3wnuyFSWgq1jcbbAxs3FF8rNzCUKA== (len 52)
    Stringa crittata: F[h7fe|'!RZ 7_+70((len 37)
    Stringa decrittata: Questa e' Una stringa crittata asdasd(len 37)


    Leggi
    esecuzione di read.php
    Stringa salvata: Rs1baBsfvjfbZpEc/GWv/3wnuyFSWgq1jcbbAxs3FF8rNzCUKA== (len 52)
    Stringa crittata: F[h7fe|'!RZ 7_+70((len 37)
    Stringa decrittata: 9I!J' Una stringa crittata asdasd(len 37)
    come si vede la prima parte della stringa e' decrittata in modo errato.

    Non capisco cosa possa essere, vista la semplicita' dell'esempio.

    Provate voi per favore?
    Grazie
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Probabile che non rispetti la sequenza delle varie funzioni.

    Per sequenza intendo:

    include("cryptatura.php");
    $txt = "Testo da criptare ma ciao";

    $cri = Rev_Crypt($txt);
    echo "
    cri prima di base64 encode: $cri
    ";

    $cri = base64_encode($cri);
    echo "
    cri dopo encode64: $cri
    ";

    $cri = base64_decode($cri);
    echo "
    cri come prima di base64: $cri
    ";

    $unc = Rev_Decrypt($cri);
    echo "

    $txt
    $cri
    $unc
    ";

    cio: rev_crypt -> base64_encode -> base64_decode -> rev_decrypt.

    sembra banale ma non lo . Ho fatto anch'io quell'errore. Prova a stampare la sequenza. deve essere sempre corretta.


  10. #10
    Hai provato a dare un occhio all'esempio? La sequenza e' giusta, ma il risultato e' sbagliato.

    Ho provato anche con algoritmi diversi, ma non cambia niente.

    Che rabbia!

    Grazie comunque
    ciao
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.