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
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; |
|
} |
|
} |
|
?>
|
|
|