Teknik is a suite of services with attractive and functional interfaces. https://www.teknik.io/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

141 lines
4.1 KiB

<?php
Class Cryptography
{
function Encrypt($key, $iv, $source, $destination, $cipher) {
if (extension_loaded('mcrypt') === true)
{
if (is_file($source) === true)
{
$source = file_get_contents($source);
switch($cipher)
{
case 'tripleDES':
$encryptedSource=$this->TripleDesEncrypt($source,$key,$iv);
break;
case 'AES':
$encryptedSource=$this->AESEncrypt($source,$key,$iv);
break;
default:
$encryptedSource=$this->TripleDesEncrypt($source,$key,$iv);
break;
}
if (file_put_contents($destination,$encryptedSource, LOCK_EX) !== false)
{
return true;
}
return false;
}
return false;
}
return false;
}
function Decrypt($key, $iv, $source, $destination, $cipher) {
if (extension_loaded('mcrypt') === true)
{
if (is_file($source) === true)
{
$source = file_get_contents($source);
switch($cipher)
{
case 'tripleDES':
$decryptedSource=self::TripleDesDecrypt($source,$key,$iv);
break;
case 'AES':
$decryptedSource=self::AESDecrypt($source,$key,$iv);
break;
default:
$decryptedSource=self::TripleDesDecrypt($source,$key,$iv);
break;
}
if (file_put_contents($destination,$decryptedSource, LOCK_EX) !== false)
{
return true;
}
echo "no read";
return false;
}
echo "no file";
return false;
}
echo "no mcrypt";
return false;
}
/*
Apply tripleDES algorthim for encryption, append "___EOT" to encrypted file ,
so that we can remove it while decrpytion also padding 0's
*/
function TripleDesEncrypt($buffer,$key,$iv) {
$cipher = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', '');
$buffer.='___EOT';
// get the amount of bytes to pad
$extra = 8 - (strlen($buffer) % 8);
// add the zero padding
if($extra > 0) {
for($i = 0; $i < $extra; $i++) {
$buffer .= '_';
}
}
mcrypt_generic_init($cipher, $key, $iv);
$result = mcrypt_generic($cipher, $buffer);
mcrypt_generic_deinit($cipher);
return base64_encode($result);
}
/*
Apply tripleDES algorthim for decryption, remove "___EOT" from encrypted file ,
so that we can get the real data.
*/
function TripleDesDecrypt($buffer,$key,$iv) {
$buffer= base64_decode($buffer);
$cipher = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', '');
mcrypt_generic_init($cipher, $key, $iv);
$result = mdecrypt_generic($cipher,$buffer);
$result=substr($result,0,strpos($result,'___EOT'));
mcrypt_generic_deinit($cipher);
return $result;
}
/*
Apply AES algorthim for encryption, append "___EOT" to encrypted file ,
so that we can remove it while decrpytion also padding 0's
*/
function AESEncrypt($buffer,$key,$iv) {
$cipher = mcrypt_module_open('rijndael-256', '', 'cbc', '');
$buffer.='___EOT';
// get the amount of bytes to pad
$extra = 8 - (strlen($buffer) % 8);
// add the zero padding
if($extra > 0) {
for($i = 0; $i < $extra; $i++) {
$buffer .= '_';
}
}
mcrypt_generic_init($cipher, $key, $iv);
$result = mcrypt_generic($cipher, $buffer);
mcrypt_generic_deinit($cipher);
return base64_encode($result);
}
/*
Apply AES algorthim for decryption, remove "___EOT" from encrypted file ,
so that we can get the real data.
*/
function AESDecrypt($buffer,$key,$iv) {
$buffer= base64_decode($buffer);
$cipher = mcrypt_module_open('rijndael-256', '', 'cbc', '');
mcrypt_generic_init($cipher, $key, $iv);
$result = mdecrypt_generic($cipher,$buffer);
$result=substr($result,0,strpos($result,'___EOT'));
mcrypt_generic_deinit($cipher);
return $result;
}
}
?>