Skip to content

Instantly share code, notes, and snippets.

@MegaBedder
Created July 10, 2017 10:39
Show Gist options
  • Save MegaBedder/b19524b130340300277ce2f2708ef8b4 to your computer and use it in GitHub Desktop.
Save MegaBedder/b19524b130340300277ce2f2708ef8b4 to your computer and use it in GitHub Desktop.
CNL2 Decryption [AES][BASE16][PHP]
<?php
/**
Aes encryption
*/
class AES {
const M_CBC = 'cbc';
const M_CFB = 'cfb';
const M_ECB = 'ecb';
const M_NOFB = 'nofb';
const M_OFB = 'ofb';
const M_STREAM = 'stream';
protected $key;
protected $cipher;
protected $data;
protected $mode;
protected $IV;
/**
*
* @param type $data
* @param type $key
* @param type $blockSize
* @param type $mode
*/
function __construct($data = null, $key = null, $blockSize = null, $mode = null) {
$this->setData($data);
$this->setKey($key);
$this->setBlockSize($blockSize);
$this->setMode($mode);
$this->setIV("");
}
/**
*
* @param type $data
*/
public function setData($data) {
$this->data = $data;
}
/**
*
* @param type $key
*/
public function setKey($key) {
$this->key = $key;
}
/**
*
* @param type $blockSize
*/
public function setBlockSize($blockSize) {
switch ($blockSize) {
case 128:
$this->cipher = MCRYPT_RIJNDAEL_128;
break;
case 192:
$this->cipher = MCRYPT_RIJNDAEL_192;
break;
case 256:
$this->cipher = MCRYPT_RIJNDAEL_256;
break;
}
}
/**
*
* @param type $mode
*/
public function setMode($mode) {
switch ($mode) {
case AES::M_CBC:
$this->mode = MCRYPT_MODE_CBC;
break;
case AES::M_CFB:
$this->mode = MCRYPT_MODE_CFB;
break;
case AES::M_ECB:
$this->mode = MCRYPT_MODE_ECB;
break;
case AES::M_NOFB:
$this->mode = MCRYPT_MODE_NOFB;
break;
case AES::M_OFB:
$this->mode = MCRYPT_MODE_OFB;
break;
case AES::M_STREAM:
$this->mode = MCRYPT_MODE_STREAM;
break;
default:
$this->mode = MCRYPT_MODE_ECB;
break;
}
}
/**
*
* @return boolean
*/
public function validateParams() {
if ($this->data != null &&
$this->key != null &&
$this->cipher != null) {
return true;
} else {
return FALSE;
}
}
public function setIV($IV) {
$this->IV = $IV;
}
protected function getIV() {
if ($this->IV == "") {
$this->IV = mcrypt_create_iv(mcrypt_get_iv_size($this->cipher, $this->mode), MCRYPT_RAND);
}
return $this->IV;
}
/**
* @return type
* @throws Exception
*/
public function encrypt() {
if ($this->validateParams()) {
return trim(base64_encode(
mcrypt_encrypt(
$this->cipher, $this->key, $this->data, $this->mode, $this->getIV())));
} else {
throw new Exception('Invlid params!');
}
}
/**
*
* @return type
* @throws Exception
*/
public function decrypt() {
if ($this->validateParams()) {
return trim(mcrypt_decrypt(
$this->cipher, $this->key, base64_decode($this->data), $this->mode, $this->getIV()));
} else {
throw new Exception('Invlid params!');
}
}
}
function base16_encode($text)
{
return bin2hex($text);
}
function base16_decode($base16){
return pack("H*", $base16);
}
// http://jdownloader.org/knowledge/wiki/glossary/cnl2
$jkey="{BASE16_KEY}";
$links="{AES_crypted}";
$aes = new AES($links, base16_decode($jkey), 128, AES::M_CBC);
$dec = $aes->decrypt();
echo "Decryption:\r\n" . $dec;
@MegaBedder
Copy link
Author

MegaBedder commented Aug 11, 2017

Work in PHP 5.4.0 & 5.5.34

No work in PHP 5.5.35 or in PHP7
Fatal error: Call to undefined function mcrypt_decrypt() on line 145

This function has been DEPRECATED as of PHP 7.1.0 and REMOVED as of PHP 7.2.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment