2021-02-27 13:37:09 +02:00
<? php
/**
* @param string $data The data to be encrypted, this can only encrypt strings.
* @param string $key The key to use to encrypt the data, this key should be generated using the openssl_random_pseudo_bytes
* @param string $cipherMethod The cypher method to use in the encryption process, these can be checked using
* @param bool $integrity_check Check if the encrypted data can also be decypted, this will take 2x more time to process the data, but will make 100% sure that the data is safe and can be decrypted.
*/
function encryptData ( string $data , string $key , string $cipherMethod = 'AES-256-CBC' , bool $integrity_check = TRUE ) {
// Lowercase the cipher
$cipherMethod = strtolower ( $cipherMethod );
// Check if the encryption method is valid
if ( ! in_array ( $cipherMethod , openssl_get_cipher_methods ())) {
// Cypher was not in the available ciphers list.
return FALSE ;
}
// To encrypt a string
$iv = openssl_random_pseudo_bytes ( openssl_cipher_iv_length ( $cipherMethod ));
// Encrypt the data
$encryptedData = openssl_encrypt ( $data , $cipherMethod , $key , OPENSSL_RAW_DATA , $iv );
// Append the iv to the encrypted data
$encryptedData = $iv . $encryptedData ;
// base64 encrypt to make sure we don't lose bytes
$encryptedData = base64_encode ( $encryptedData );
// Check if we should verify the integrity of the encryption
if ( $integrity_check === TRUE ) {
// Test for decryption validity
if ( md5 ( decryptData ( $encryptedData , $key , $cipherMethod )) === md5 ( $data ) ) {
// Put the output in the result
return $encryptedData ;
} else {
// Assign the output to the result
return FALSE ;
}
} else {
// Simply return the results
return $encryptedData ;
}
}
/**
* @param string $data The data to be encrypted, this can only encrypt strings.
* @param string $key The key to use to encrypt the data, this key should be generated using the openssl_random_pseudo_bytes
* @param string $cipherMethod The cypher method to use in the encryption process, these can be checked using
*/
function decryptData ( string $data , string $key , string $cipherMethod = 'AES-256-CBC' ) {
// Lowercase the cipher
$cipherMethod = strtolower ( $cipherMethod );
// Check if the encryption method is valid
if ( ! in_array ( $cipherMethod , openssl_get_cipher_methods ())) {
// Cypher was not in the available ciphers list.
return FALSE ;
}
// base64 decode the data.
$data = base64_decode ( $data );
// Get the length of the IV
$iv_length = openssl_cipher_iv_length ( $cipherMethod );
// Get the IV from the decoded data
$iv = substr ( $data , 0 , $iv_length );
// Get the encrypted string from the data
$data = substr ( $data , $iv_length );
// Decrypt the data
$data = openssl_decrypt ( $data , $cipherMethod , $key , OPENSSL_RAW_DATA , $iv );
// Return the data
return $data ;
2021-02-27 13:52:14 +02:00
}