È un encoder sicuro e hasher?

-1

Voglio chiedere se il mio codice è sicuro o meno. se questo non è sicuro per favore dimmi il motivo. Questo codice è misto a Rjindael-256, base64_encode e SHA-512.

function xencoder($input,$key) {
    $salt = 'Q(i1V7X,k&_Ydk@8T5punQdL@S+Ih&kY6swz:)wg6n5!yOQ*q5iDtm^b49J#XTHB';
    $key = substr(hash('sha512', base64_encode($key.$salt)), 0, 32);
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $output = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $input, MCRYPT_MODE_ECB, $iv));
    return $output;
}

function xdecoder($input,$key) {
   $salt = 'Q(i1V7X,k&_Ydk@8T5punQdL@S+Ih&kY6swz:)wg6n5!yOQ*q5iDtm^b49J#XTHB';
   $key = substr(hash('sha512', base64_encode($key.$salt)), 0, 32);
   $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
   $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
   $output = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($input), MCRYPT_MODE_ECB, $iv);
   return $output;
}

function xhasher($input,$key) {
    $output = strtoupper(hash('sha512',xencoder($input,$key)));
    $output = substr($output,0,36);
    $output = "^XH".$output."^";
    return $output;
}

Ad esempio, chiamo xhasher all'hash la password xhasher ("mypassword", "AUTH_PASSWORD") l'output sarà ^ XH9586C75B1A098D3ACF97C6581E0CCB0C8CF8 ^

    
posta dharaninja 01.05.2015 - 02:02
fonte

2 risposte

1

Stai utilizzando la modalità ECB, che è rotta. Potresti sostituirlo con CBC.

Riduci la chiave a metà forza mentre componi una chiave di soli caratteri esadecimali.

Il vettore di inizializzazione non fa nulla nel codice a causa della modalità ECB.

Se in realtà disponi di un vettore di inizializzazione, devi inviarlo insieme al messaggio crittografato e utilizzarlo per la decrittografia.

Il tuo schema manca dell'autenticazione dei messaggi, che lo rende malleabile e quindi vulnerabile ad alcuni attacchi sottili.

Si suggerisce che xhasher è uno schema di hashing delle password, per questo non ha alcun meccanismo di rafforzamento della chiave. E il modo in cui lo usi, manca di sale. (Il $salt nel tuo codice è in realtà un pepe nell'hash della password.)

    
risposta data 02.05.2015 - 14:50
fonte
0

Non è vero che usi un sale statico, il sale deve essere un numero casuale con una lunghezza fissa per ciascun input.

    
risposta data 02.05.2015 - 07:12
fonte

Leggi altre domande sui tag