+ Changed the approach to an OOP model
This commit is contained in:
parent
a1833a238c
commit
5ae3d8294b
57
lib.php
57
lib.php
|
@ -1,11 +1,46 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @author Kato Twofold
|
||||||
|
* @copyright MIT
|
||||||
|
*
|
||||||
|
* The class has full support for encryption of strings, provides validation for those
|
||||||
|
* and makes sure they can be decrypted on the other end, the key is extremely important
|
||||||
|
* and you MUST keep track of it and not lose it as there is no way of getting it back.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class kpcrypt {
|
||||||
|
|
||||||
|
// The key to use in the encryption process
|
||||||
|
private $key = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $key [Optional] The key to use for encryption, if none is mentioned a random one will be generated
|
||||||
|
*/
|
||||||
|
public function __construct( string $key = null) {
|
||||||
|
// If no key is mentioned, generate one
|
||||||
|
if ( empty($key) ) {
|
||||||
|
$key = bin2hex(openssl_random_pseudo_bytes("64"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the key that the instance is currently using, really useful for when you randomly generate it!
|
||||||
|
* @return string The key of the instance
|
||||||
|
*/
|
||||||
|
public function getKey() {
|
||||||
|
return $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
* @param string $data The data to be encrypted, this can only encrypt strings.
|
* @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 $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 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.
|
* @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) {
|
function encryptData(string $data, string $key, string $cipherMethod = 'AES-256-CBC', bool $integrity_check = TRUE) {
|
||||||
|
// Grab the key from self-reference
|
||||||
|
$key = $this->key;
|
||||||
|
|
||||||
// Lowercase the cipher
|
// Lowercase the cipher
|
||||||
$cipherMethod = strtolower($cipherMethod);
|
$cipherMethod = strtolower($cipherMethod);
|
||||||
|
@ -29,9 +64,9 @@ function encryptData( string $data, string $key, string $cipherMethod = 'AES-256
|
||||||
$encryptedData = base64_encode($encryptedData);
|
$encryptedData = base64_encode($encryptedData);
|
||||||
|
|
||||||
// Check if we should verify the integrity of the encryption
|
// Check if we should verify the integrity of the encryption
|
||||||
if ( $integrity_check === TRUE ) {
|
if ($integrity_check === TRUE) {
|
||||||
// Test for decryption validity
|
// Test for decryption validity
|
||||||
if ( md5(decryptData($encryptedData, $key, $cipherMethod)) === md5($data) ) {
|
if (md5($this->decryptData($encryptedData, $key, $cipherMethod)) === md5($data)) {
|
||||||
// Put the output in the result
|
// Put the output in the result
|
||||||
return $encryptedData;
|
return $encryptedData;
|
||||||
} else {
|
} else {
|
||||||
|
@ -42,15 +77,16 @@ function encryptData( string $data, string $key, string $cipherMethod = 'AES-256
|
||||||
// Simply return the results
|
// Simply return the results
|
||||||
return $encryptedData;
|
return $encryptedData;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
/**
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $data The data to be encrypted, this can only encrypt strings.
|
* @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 $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 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' ) {
|
function decryptData(string $data, string $cipherMethod = 'AES-256-CBC') {
|
||||||
|
// Grab the key from self-reference
|
||||||
|
$key = $this->key;
|
||||||
|
|
||||||
// Lowercase the cipher
|
// Lowercase the cipher
|
||||||
$cipherMethod = strtolower($cipherMethod);
|
$cipherMethod = strtolower($cipherMethod);
|
||||||
|
@ -67,14 +103,17 @@ function decryptData( string $data, string $key, string $cipherMethod = 'AES-256
|
||||||
// Get the length of the IV
|
// Get the length of the IV
|
||||||
$iv_length = openssl_cipher_iv_length($cipherMethod);
|
$iv_length = openssl_cipher_iv_length($cipherMethod);
|
||||||
// Get the IV from the decoded data
|
// Get the IV from the decoded data
|
||||||
$iv = substr($data,0,$iv_length);
|
$iv = substr($data, 0, $iv_length);
|
||||||
|
|
||||||
// Get the encrypted string from the data
|
// Get the encrypted string from the data
|
||||||
$data = substr($data, $iv_length);
|
$data = substr($data, $iv_length);
|
||||||
|
|
||||||
// Decrypt the data
|
// Decrypt the data
|
||||||
$data = openssl_decrypt($data,$cipherMethod,$key, OPENSSL_RAW_DATA, $iv);
|
$data = openssl_decrypt($data, $cipherMethod, $key, OPENSSL_RAW_DATA, $iv);
|
||||||
|
|
||||||
// Return the data
|
// Return the data
|
||||||
return $data;
|
return $data;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in New Issue