PHP 8.4.2 Released!

mcrypt_encrypt

(PHP 4 >= 4.0.2, PHP 5, PHP 7 < 7.2.0, PECL mcrypt >= 1.0.0)

mcrypt_encryptChiffre un texte

Avertissement

Cette fonction est OBSOLÈTE à partir de PHP 7.1.0 et a été SUPPRIMÉE à partir de PHP 7.2.0. Dépendre de cette fonction est fortement déconseillé.

Description

mcrypt_encrypt(
    string $cipher,
    string $key,
    string $data,
    string $mode,
    string $iv = ?
): string|false

mcrypt_encrypt() chiffre les données, et retourne les données chiffrées.

Liste de paramètres

cipher

Une constante parmi les constantes MCRYPT_ciphername, ou le nom de l'algorithme, sous la forme d'une chaîne de caractères.

key

La clé avec laquelle les données seront chiffrées. Si la taille de la clé fournie n'est pas supportée par le cipher, la fonction émettra un warning et retournera false

data

Les données qui seront chiffrées, avec le cipher et le mode indiqué. Si la taille des données n'est pas un multiple de la taille de bloc, les données seront complétées par des caractères '\0', autant que nécessaire.

Le texte chiffré retourné peut être plus long que la taille des données passées en argument via data.

mode

Une constantes parmi les constantes MCRYPT_MODE_modename, ou une des chaînes suivantes : "ecb", "cbc", "cfb", "ofb", "nofb" ou "stream".

iv

Utilisé pour l'initialisation des modes CBC, CFB, OFB, ainsi que dans quelques algorithmes du mode STREAM. Si la taille de l'IV fourni n'est pas supporté par le mode d'opération ou si vous ne fournissez pas d'IV, mais que le mode d'opération en requiert un, la fonction émettra un avertissement et retournera false.

Valeurs de retour

Retourne les données chiffrées, sous forme de chaîne de caractères ou false si une erreur survient.

Exemples

Exemple #1 Exemple avec mcrypt_encrypt()

<?php
# --- CHIFFREMENT ---

# la clé devrait être un binaire aléatoire, utilisez la fonction scrypt, bcrypt
# ou PBKDF2 pour convertir une chaîne de caractères en une clé.
# La clé est spécifiée en utilisant une notation héxadécimale.
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");

# Montre la taille de la clé utilisée ; soit des clés sur 16, 24 ou 32 octets pour
# AES-128, 192 et 256 respectivement.
$key_size = strlen($key);
echo
"Taille de la clé : " . $key_size . "\n";

$plaintext = "Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding.";

# Crée un IV aléatoire à utiliser avec l'encodage CBC
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

# Crée un texte cipher compatible avec AES (Rijndael block size = 128)
# pour conserver le texte confidentiel.
# Uniquement applicable pour les entrées encodées qui ne se terminent jamais
# pas la valeur 00h (en raison de la suppression par défaut des zéros finaux)
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
$plaintext, MCRYPT_MODE_CBC, $iv);

# On ajoute le IV au début du texte chiffré pour le rendre disponible pour le déchiffrement
$ciphertext = $iv . $ciphertext;

# Encode le texte chiffré résultant pour qu'il puisse être représenté par une chaîne de caractères
$ciphertext_base64 = base64_encode($ciphertext);

echo
$ciphertext_base64 . "\n";

# === ATTENTION ===

# Le texte chiffré résultant ne contient aucune intégrité ni d'authentification
# et il n'est pas protégé contre des attaques de type "oracle padding".

# --- DECHIFFREMENT ---

$ciphertext_dec = base64_decode($ciphertext_base64);

# Récupère le IV, iv_size doit avoir été créé en utilisant la fonction
# mcrypt_get_iv_size()
$iv_dec = substr($ciphertext_dec, 0, $iv_size);

# Récupère le texte du cipher (tout, sauf $iv_size du début)
$ciphertext_dec = substr($ciphertext_dec, $iv_size);

# On doit supprimer les caractères de valeur 00h de la fin du texte plein
$plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
$ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);

echo
$plaintext_dec . "\n";
?>

L'exemple ci-dessus va afficher :

Taille de la clé : 32
ENJW8mS2KaJoNB5E5CoSAAu0xARgsR1bdzFWpEn+poYw45q+73az5kYi4j+0haevext1dGrcW8Qi59txfCBV8BBj3bzRP3dFCp3CPQSJ8eU=
Cette chaîne de caractère a été chiffrée en AES-256 / CBC / ZeroBytePadding.

Voir aussi

add a note

User Contributed Notes 14 notes

up
62
scott at paragonie dot com
9 years ago
If you're writing code to encrypt/encrypt data in 2015, you should use openssl_encrypt() and openssl_decrypt(). The underlying library (libmcrypt) has been abandoned since 2007, and performs far worse than OpenSSL (which leverages AES-NI on modern processors and is cache-timing safe).

Also, MCRYPT_RIJNDAEL_256 is not AES-256, it's a different variant of the Rijndael block cipher. If you want AES-256 in mcrypt, you have to use MCRYPT_RIJNDAEL_128 with a 32-byte key. OpenSSL makes it more obvious which mode you are using (i.e. 'aes-128-cbc' vs 'aes-256-ctr').

OpenSSL also uses PKCS7 padding with CBC mode rather than mcrypt's NULL byte padding. Thus, mcrypt is more likely to make your code vulnerable to padding oracle attacks than OpenSSL.

Finally, if you are not authenticating your ciphertexts (Encrypt Then MAC), you're doing it wrong.

Further reading:

https://paragonie.com/blog/2015/05/using-encryption-and-authentication-correctly

https://paragonie.com/blog/2015/05/if-you-re-typing-word-mcrypt-into-your-code-you-re-doing-it-wrong
up
23
jesse at pctest dot com
20 years ago
Solving 3DES incompatibilities with .NET's TripleDESCryptoServiceProvider

mcrypt's 3DES only accepts 192 bit keys, but Microsoft's .NET and many other tools accept both 128 and 192 bit keys.
If your key is too short, mcrypt will 'helpfully' pad null characters onto the end, but .NET refuses to use a key where the last third is all null (this is a Bad Key). This prevents you from emulating mcrypt's "short key" behaviour in .NET.

How to reconcile this? A little DES theory is in order
3DES runs the DES algorithm three times, using each third of your 192 bit key as the 64 bit DES key

Encrypt Key1 -> Decrypt Key2 -> Encrypt Key3

and both .NET and PHP's mcrypt do this the same way.
The problem arises in short key mode on .NET, since 128 bits is only two 64 bit DES keys
The algorithm that they use then is:

Encrypt Key1 -> Decrypt Key2 -> Encrypt Key1

mcrypt does not have this mode of operation natively.
but before you go and start running DES three times yourself, here's a Quick Fix
<?php
$my_key
= "12345678abcdefgh"; // a 128 bit (16 byte) key
$my_key .= substr($my_key,0,8); // append the first 8 bytes onto the end
$secret = mcrypt_encrypt(MCRYPT_3DES, $my_key, $data, MCRYPT_MODE_CBC, $iv); //CBC is the default mode in .NET
?>

And, like magic, it works.

There's one more caveat: Data padding
mcrypt always pads data will the null character
but .NET has two padding modes: "Zeros" and "PKCS7"
Zeros is identical to the mcrypt scheme, but PKCS7 is the default.
PKCS7 isn't much more complex, though:
instead of nulls, it appends the total number of padding bytes (which means, for 3DES, it can be a value from 0x01 to 0x07)
if your plaintext is "ABC", it will be padded into:
0x41 0x42 0x43 0x05 0x05 0x05 0x05 0x05

You can remove these from a decrypted string in PHP by counting the number of times that last character appears, and if it matches it's ordinal value, truncating the string by that many characters:
<?php
$block
= mcrypt_get_block_size('tripledes', 'cbc');
$packing = ord($text{strlen($text) - 1});
if(
$packing and ($packing < $block)){
for(
$P = strlen($text) - 1; $P >= strlen($text) - $packing; $P--){
if(
ord($text{$P}) != $packing){
$packing = 0;
}
}
}
$text = substr($text,0,strlen($text) - $packing);
?>

And to pad a string that you intend to decrypt with .NET, just add the chr() value of the number of padding bytes:
<?php
$block
= mcrypt_get_block_size('tripledes', 'cbc');
$len = strlen($dat);
$padding = $block - ($len % $block);
$dat .= str_repeat(chr($padding),$padding);
?>

That's all there is to it.
Knowing this, you can encrypt, decrypt, and duplicate exactly any .NET 3DES behaviour in PHP.
up
4
your dot brother dot t at hotmail dot com
9 years ago
The encryption has no authenticity check. It can be achieved with three methods, described in http://en.wikipedia.org/wiki/Authenticated_encryption#Approaches_to_Authenticated_Encryption
Encrypt-then-MAC (EtM), Encrypt-and-MAC (E&M), MAC-then-Encrypt (MtE).

The following is a suggestion for MtE:

<?php
public static function getMacAlgoBlockSize($algorithm = 'sha1')
{
switch(
$algorithm)
{
case
'sha1':
{
return
160;
}
default:
{
return
false;
break;
}
}
}

public static function
decrypt($message, $key, $mac_algorithm = 'sha1',
$enc_algorithm = MCRYPT_RIJNDAEL_256, $enc_mode = MCRYPT_MODE_CBC)
{
$message= base64_decode($message);
$iv_size = mcrypt_get_iv_size($enc_algorithm, $enc_mode);

$iv_dec = substr($message, 0, $iv_size);
$message= substr($message, $iv_size);

$message= mcrypt_decrypt($enc_algorithm, $key, $message, $enc_mode, $iv_dec);

$mac_block_size = ceil(static::getMacAlgoBlockSize($mac_algorithm)/8);
$mac_dec = substr($message, 0, $mac_block_size);
$message= substr($message, $mac_block_size);

$mac = hash_hmac($mac_algorithm, $message, $key, true);

if(
$mac_dec == $mac)
{
return
$password;
}
else
{
return
false;
}
}

public static function
encrypt($message, $key, $mac_algorithm = 'sha1',
$enc_algorithm = MCRYPT_RIJNDAEL_256, $enc_mode = MCRYPT_MODE_CBC)
{

$mac = hash_hmac($mac_algorithm, $message, $key, true);
$mac = substr($mac, 0, ceil(static::getMacAlgoBlockSize($mac_algorithm)/8));
$message= $mac . $message;

$iv_size = mcrypt_get_iv_size($enc_algorithm, $enc_mode);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$ciphertext = mcrypt_encrypt($enc_algorithm, $key,
$message, $enc_mode, $iv);

return
base64_encode($iv . $ciphertext);
}
?>
up
5
Anonymous
13 years ago
In the other notes there are some misconceptions about crypto and the IV, especially for CBC mode.

The most important point: Encryption DOES NOT provide any proof of data integrity or authentication WHATSOEVER. If you need to be sure that the data is secret and not tampered with, you need to encrypt THEN use a keyed HMAC.

For CBC mode, the IV DOES NOT need to be secret. It can be sent along with the plaintext. It needs to be UNIQUE and RANDOM. So that every message is encrypted with a different IV.

The best way to generate an IV is to use mcrypt_create_iv().

Keys must be binary, not ASCII. To create a key from a password:

<?php
$password
= "MyPassword!1!";
$aes256Key = hash("SHA256", $password, true); //we want a 32 byte binary blob
?>
up
4
Scott.a.Herbert at googlemail.com
12 years ago
It is always better to use a standard encryption cipher's rather than to "roll your own", firstly the standard cipher has been tested by world class crypto-analysis's where as unless your a world class crypto-analysis (and if you are why are you even thinking of rolling your own?!?) you won't have the skills needed to even test it (for example if you just XOR each character with a key, it may look secure (the text will be different) but if you count the number of times a character is repeated you see whatever the letter "E" encrypts to occurs more often then the encrypted "Z" (assuming English language plain text)

Secondly, you may think that the hidden nature of your cipher makes it more secure, but the fact is that your cipher is likely *only* secure because it's secret, if someone what able to break-in to your site and steal your code (but not your key) they maybe able break you encrypted data, if someone broke in and found you where using Blowfish (for example) it wouldn't help them.
up
2
MadMass
11 years ago
Note that the IV must be the same for mcrypt_encrypt and mcrypt_decrypt, otherwise you will have corrupted data after decryption.
up
2
Anonymous
13 years ago
I've noticed some people using a-z, A-Z and 0-9 for keys and stating things like "16 characters is a 128-bit key". This isn't true. Using only these characters, you will get at most 6 bits of entropy per chartacter:

log2(26 + 26 + 10) = 5.954196310386876

So you're actually only getting 95 bits of entropy in 16 characters, which is 0.0000000117% of the keyspace you would get if you were using the full range.

In order to get the full entropy from a key using just a-z, A-Z and 0-9 you should multiply your key length by 1.3333 to account for the 2 bits of lost entropy per byte.
up
1
Anonymous
17 years ago
I should mention that ECB mode ignores the IV, so it is misleading to show an example using both MCRYPT_MODE_ECB and an IV (the example in the manual shows the same thing). Also, it's important to know that ECB is useful for random data, but structured data should use a stronger mode like MCRYPT_MODE_CBC

Also, rtrim($decryptedtext, "\0") would be a better option to remove NULL padding than my lazy trim()...
up
-3
Robin Leffmann
14 years ago
Contrary to what is implied in the mcrypt_encrypt() manual page, as well as the info given regarding the CBC vs CFB modes, mcrypt_encrypt() works just fine for encrypting binary data as well.

A simple example verifies that the decrypted output is binary identical once cut to its original length:

<?php

// 448-bit key (56 bytes) - the only size that mcrypt/php uses for the Blowfish cipher
// (using a smaller key works just fine, as mcrypt appends \0 to reach proper key-size)
$key = 'SADFo92jzVnzSj39IUYGvi6eL8v6RvJH8Cytuiouh547vCytdyUFl76R';

// Blowfish/CBC uses an 8-byte IV
$iv = substr( md5(mt_rand(),true), 0, 8 );

// do 50 encrypt/decrypt operations on some random data, and verify integrity with md5()
for( $i = 0; $i < 50; $i++ )
{
// create a random, binary string of random length
$size = mt_rand( 25000, 500000 );
$c = 0; $data = null;
while(
$c++ * 16 < $size )
$data .= md5( mt_rand(), true );
$data = substr( $data, 0, $size );
$cksum = md5( $data );

// encrypt using Blowfish/CBC
$enc = mcrypt_encrypt( MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_CBC, $iv );

echo
$size . ' -> ' . strlen( $enc ) . ' -> ';

// decrypt (using same IV - a must for the CBC mode)
$dec = mcrypt_decrypt( MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_CBC, $iv );

// cut the output with substr(), NOT by using rtrim() as is suggested in some of
// the mcrypt manual pages - this is binary data, not plaintext
echo ( md5(substr($dec, 0, $size)) == $cksum ? 'ok' : 'bad' ) . PHP_EOL;
}

?>
up
-5
stefan at katic dot me dot rs
10 years ago
I was trying (and succeeded) to encrypt and decrypt in JAVA, pass it to php, and do it again,without corrupting data when I noticed something interesting. So, my code goes like this:
$data = 'one';
$key = '1234567890123456';

function encrypt($data, $key){
return base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
$key,
$data,
MCRYPT_MODE_CBC,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
)
);
}
function decrypt($data, $key){
$decode = base64_decode($data);
return mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
$key,
$decode,
MCRYPT_MODE_CBC,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
);


}
$encrypted = encrypt($data, $key);
$decrypted= decrypt($encrypted, $key);

//In the beginning, I thought something's wrong, because I did '===' comparison between $decrypted and $data. It didn't work (but later started working, again, dont know why...) So, I dumped both:
var_dump($data);
var_dump($decrypted);
//Results:
string(16) "one"
string(16) "one"
//Clearly, the length of both is 3, not 16. Just wanted to let you know what could happen, and I really don't know if this is a bug...
Thanks,
S.
up
-2
Anonymous
6 years ago
<?php
# Vernam Cipher (One-time pad)
$k1 = '1.key';
$k2 = '2.key';
$d = 'The quick brown fox jumped over the lazy dog';
VernamCipher::createTestKeyFile($k1, 1024);
copy($k1, $k2);
$c1 = new VernamCipher($k1);
$eD = $c1->encryptWithHMAC($d);
echo
'Encrypted: ', bin2hex($eD);
$c2 = new VernamCipher($k2);
echo
PHP_EOL, 'Decrypted: ', $c2->decryptWithHMAC($eD);

class
VernamCipher
{
const
DEFAULT_HMAC_ALGO = 'sha3-256';
const
DEFAULT_HMAC_KEY_LENGTH = 16;
const
DEFAULT_HMAC_HASH_LENGTH = 32;
private
$keyFilePath;
private
$keyFileHandler;
private
$deferredFtruncate = false;
private
$deferredFtruncatePos;
private
$hmacAlgo = self::DEFAULT_HMAC_ALGO;
private
$hmacKeyLength = self::DEFAULT_HMAC_KEY_LENGTH;
private
$hmacHashLength = self::DEFAULT_HMAC_HASH_LENGTH;

function
__construct(string $keyFilePath, string $hmacAlgo = self::DEFAULT_HMAC_ALGO, int $hmacKeyLength = self::DEFAULT_HMAC_KEY_LENGTH)
{
$this->keyFilePath = $keyFilePath;
$this->openKeyFile();

if(
$hmacAlgo !== self::DEFAULT_HMAC_ALGO) {
if(
in_array($hmacAlgo, hash_algos())) {
$this->hmacAlgo = $hmacAlgo;
$this->hmacHashLength = strlen(hash($this->hmacAlgo, '', true));
}
else {
$this->hmacAlgo = self::DEFAULT_HMAC_ALGO;
$this->hmacHashLength = self::DEFAULT_HMAC_HASH_LENGTH;
}
}

if(
$hmacKeyLength !== self::DEFAULT_HMAC_KEY_LENGTH) {
$this->hmacKeyLength = $hmacKeyLength;
}
}
public function
encryptWithHMAC(string $data)
{
$hmacKey = $this->getBytes($this->hmacKeyLength);
$encData = $this->encrypt($data);
$dataHmac = $this->hashHmac($encData, $hmacKey);

return
$dataHmac.$encData;
}
public function
decryptWithHMAC(string $data)
{
$dataLength = strlen($data);

if(
$dataLength < $this->hmacHashLength)
throw new
Exception('data length '.$dataLength.' < hmac length '. $this->hmacHashLength);

$dataHmacRemote = substr($data, 0, $this->hmacHashLength);
$dataOnly = substr($data, $this->hmacHashLength);

$hmacKey = $this->getBytes($this->hmacKeyLength, false);
$dataHmacLocal = $this->hashHmac($dataOnly, $hmacKey);

if(
hash_equals($dataHmacLocal, $dataHmacRemote) === false)
throw new
Exception('Hashes not equals, remote: '.bin2hex($dataHmacRemote).' local:'. bin2hex($dataHmacLocal));

$this->deferredFtruncate();

return
$this->encrypt($dataOnly);
}
public function
encrypt(string $data) : string
{
$dataLength = strlen($data);
$bytes = $this->getBytes($dataLength);
for(
$i=0;$i<$dataLength;$i++)
$data{$i} = $data{$i} ^ $bytes{$i};

return
$data;
}
public function
decrypt(string $data) : string
{
return
$this->encrypt($data);
}
private function
hashHmac($data, $key)
{
return
hash_hmac($this->hmacAlgo, $data, $key, true);
}
# Don't use in production. You must use true random number generator.
public static function createTestKeyFile(string $filePath, int $size)
{
file_put_contents($filePath, random_bytes($size));
}
private function
deferredFtruncate()
{
if(!
$this->deferredFtruncate)
return;

ftruncate($this->keyFileHandler, $this->deferredFtruncatePos);
$this->deferredFtruncate = false;
}
public function
getBytes(int $length, $truncateNow = true) : string
{
fseek($this->keyFileHandler, 0, SEEK_END);
$currentPos = ftell($this->keyFileHandler);

if(
$currentPos < $length)
throw new
Exception('Not enough key materials, key size: '. $currentPos. ' needed: '.$length);

fseek($this->keyFileHandler, -$length, SEEK_END);
$bytes = fread($this->keyFileHandler, $length);

if(
$truncateNow)
ftruncate($this->keyFileHandler, $currentPos - $length);
else {
$this->deferredFtruncate = true;
$this->deferredFtruncatePos = $currentPos - $length;
}

return
$bytes;
}
private function
openKeyFile()
{
if(
$this->keyFileHandler)
return;

if((
$this->keyFileHandler = fopen($this->keyFilePath, 'rb+')) === false)
throw new
Exception('Cant open key file: '.$this->keyFilePath);

if(!
flock($this->keyFileHandler, LOCK_EX | LOCK_NB))
throw new
Exception('Cant lock key file: '.$this->keyFilePath);
}
}
?>
up
-5
stonecypher at gmail dot com
18 years ago
Most of the user-written cipher examples here are badly broken, and there are a few cases where the manual says things that are outright incorrect, such as that it's "safe to transmit the initialization vector in plaintext" (this is incorrect: see Ciphers By Ritter, http://www.ciphersbyritter.com/GLOSSARY.HTM#IV , for details.)

mcrypt itself is perfectly safe, but correct and therefore safe usage is inobvious. It is important to use a cryptographic library correctly; a simple usage error, even when it produces results that can be unpacked at the other side, can render a strong algorithm completely useless.

The initialization vector must be permuted with a recoverable noise source (an arbitrary md5 hash is acceptable, since it's just a fake OTP and its origin contents are wholly unimportant.)

Passwords should be remade with a salted one-way hash (md5 is again acceptable even though it's been damaged, since the only thing you could recover from a cracked md5 hash is the source data to generate the password, which is useless.)

It's important to use a sane block mode (OFB is unsafe for almost all algorithms; never use it. Prefer CBC in all cases except where you need to deal with a degraded signal and cannot retransmit.)

A correct usage example is actually pretty long and needs a lot of explanation, so I developed a safe wrapper library which doesn't constrain usage and which comments itself very heavily. It's appropriate for use or for learning. Please see my blog for details on Stone PHP SafeCrypt:

http://blog.sc.tri-bit.com/archives/101
up
-5
leilond at hotmail dot com
8 years ago
I always use this method to prevent a lot of errors

function encrypt( $string ) {
$algorithm = 'rijndael-128'; // You can use any of the available
$key = md5( "mypassword", true); // bynary raw 16 byte dimension.
$iv_length = mcrypt_get_iv_size( $algorithm, MCRYPT_MODE_CBC );
$iv = mcrypt_create_iv( $iv_length, MCRYPT_RAND );
$encrypted = mcrypt_encrypt( $algorithm, $key, $string, MCRYPT_MODE_CBC, $iv );
$result = base64_encode( $iv . $encrypted );
return $result;
}
function decrypt( $string ) {
$algorithm = 'rijndael-128';
$key = md5( "mypassword", true );
$iv_length = mcrypt_get_iv_size( $algorithm, MCRYPT_MODE_CBC );
$string = base64_decode( $string );
$iv = substr( $string, 0, $iv_length );
$encrypted = substr( $string, $iv_length );
$result = mcrypt_decrypt( $algoritmo, $key, $encrypted, MCRYPT_MODE_CBC, $iv );
return $result;
}
up
-5
gm dot outside+php at gmail dot com
10 years ago
Please note that the following part of the documentation is no longer true (after commit: http://git.php.net/?p=php-src.git;a=commit;h=a861a3a93d89a50ce58e1ab1abef1eb501f97483):

> key
> The key with which the data will be encrypted. If it's smaller than the required keysize, it is padded with '\0'. It is better not to use ASCII strings for keys.

That commit changed the behaviour to be strict and if the keysize is smaller than the required size a warning will be issued as follows:

Warning: mcrypt_encrypt(): Key of size 10 not supported by this algorithm. Only keys of size 16 supported in script.php on line 5

and the mcrypt_encode() will return failure.
To Top