Mohammed H
Mohammed H

Reputation: 7048

Output size of mcrypt_encrypt

I have a table with a field name. I want to store name-data as encrypted into the field. The name can be 128 characters. Then what should be the type of the field (eg: varchar(256) or text).

The following function I am using for encryption/decryption.

<?php

$salt ='whatever_you_want';

function simple_encrypt($text) {
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}

function simple_decrypt($text) {
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}

Upvotes: 1

Views: 1485

Answers (1)

Hanky Panky
Hanky Panky

Reputation: 46900

Why not run a few strings of 128 character length through your code, display the maximum size of output and make your field length accordingly? With this existing key, it returns 172 length every time.

<?php

function rand_string( $length ) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  

    $size = strlen( $chars );
    for( $i = 0; $i < $length; $i++ ) {
        $str .= $chars[ rand( 0, $size - 1 ) ];
    }

    return $str;
}


$salt ='whatever_you_want';

function simple_encrypt($text) {
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $salt, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}

function simple_decrypt($text) {
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $salt, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}



for($i=0;$i<100;$i++)
{
$word=rand_string(128);
$e=simple_encrypt($word);
echo strlen($e)."<br>";
}

?>

Upvotes: 1

Related Questions