Merge pull request #2 from danog/analysis-8Q3kjm
Applied fixes from StyleCI
This commit is contained in:
commit
0cfc2c50ea
181
aes256.php
181
aes256.php
@ -1,118 +1,119 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// by https://github.com/mgp25
|
// by https://github.com/mgp25
|
||||||
class TelegramEncryption
|
class TelegramEncryption
|
||||||
{
|
{
|
||||||
public $key;
|
public $key;
|
||||||
public $iv;
|
public $iv;
|
||||||
public $cipherText;
|
public $cipherText;
|
||||||
public $plainText;
|
public $plainText;
|
||||||
public $debug;
|
public $debug;
|
||||||
|
|
||||||
public function __construct($key, $iv, $cipherText = null, $plainText = null, $debug = false)
|
public function __construct($key, $iv, $cipherText = null, $plainText = null, $debug = false)
|
||||||
{
|
{
|
||||||
$this->key = $key;
|
$this->key = $key;
|
||||||
$this->iv = $iv;
|
$this->iv = $iv;
|
||||||
$this->cipherText = $cipherText;
|
$this->cipherText = $cipherText;
|
||||||
$this->plainText = $plainText;
|
$this->plainText = $plainText;
|
||||||
$this->debug = $debug;
|
$this->debug = $debug;
|
||||||
}
|
}
|
||||||
public function IGE256Decrypt()
|
|
||||||
{
|
|
||||||
|
|
||||||
$key = $this->key;
|
public function IGE256Decrypt()
|
||||||
$message = $this->cipherText;
|
{
|
||||||
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
|
$key = $this->key;
|
||||||
|
$message = $this->cipherText;
|
||||||
|
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
|
||||||
|
|
||||||
$xPrev = substr($this->iv, 0, $blockSize);
|
$xPrev = substr($this->iv, 0, $blockSize);
|
||||||
$yPrev = substr($this->iv, $blockSize, strlen($this->iv));
|
$yPrev = substr($this->iv, $blockSize, strlen($this->iv));
|
||||||
|
|
||||||
$decrypted = '';
|
$decrypted = '';
|
||||||
|
|
||||||
for ($i=0; $i < strlen($message); $i += $blockSize)
|
for ($i = 0; $i < strlen($message); $i += $blockSize) {
|
||||||
{
|
$x = substr($message, $i, $blockSize);
|
||||||
$x = substr($message, $i, $blockSize);
|
$this->debugLog('x: '._c($x)."\n");
|
||||||
$this->debugLog("x: " . _c($x) . "\n");
|
|
||||||
|
|
||||||
$yXOR = $this->exor($x, $yPrev);
|
$yXOR = $this->exor($x, $yPrev);
|
||||||
$this->debugLog("yPrev: " . _c($yPrev) . "\n");
|
$this->debugLog('yPrev: '._c($yPrev)."\n");
|
||||||
$this->debugLog("yXOR: " . _c($yXOR) . "\n");
|
$this->debugLog('yXOR: '._c($yXOR)."\n");
|
||||||
$yFinal = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $yXOR, MCRYPT_MODE_ECB);
|
$yFinal = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $yXOR, MCRYPT_MODE_ECB);
|
||||||
$yFinal = str_pad($yFinal, strlen($xPrev), "\x00");
|
$yFinal = str_pad($yFinal, strlen($xPrev), "\x00");
|
||||||
$this->debugLog("yFinal: " . _c($yFinal) . "\n");
|
$this->debugLog('yFinal: '._c($yFinal)."\n");
|
||||||
|
|
||||||
$y = $this->exor($yFinal, $xPrev);
|
$y = $this->exor($yFinal, $xPrev);
|
||||||
$this->debugLog("xPrev: " . _c($xPrev) . "\n");
|
$this->debugLog('xPrev: '._c($xPrev)."\n");
|
||||||
$this->debugLog("y: " . _c($y) . "\n");
|
$this->debugLog('y: '._c($y)."\n");
|
||||||
|
|
||||||
$xPrev = $x;
|
$xPrev = $x;
|
||||||
$yPrev = $y;
|
$yPrev = $y;
|
||||||
$decrypted .= $y;
|
$decrypted .= $y;
|
||||||
|
|
||||||
$this->debugLog("Currently Decrypted: "._c($decrypted)."\n\n");
|
$this->debugLog('Currently Decrypted: '._c($decrypted)."\n\n");
|
||||||
}
|
}
|
||||||
return $decrypted;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function IGE256Encrypt()
|
return $decrypted;
|
||||||
{
|
}
|
||||||
$key = $this->key;
|
|
||||||
$message = $this->plainText;
|
|
||||||
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
|
|
||||||
|
|
||||||
$xPrev = substr($this->iv, $blockSize, strlen($this->iv));
|
public function IGE256Encrypt()
|
||||||
$yPrev = substr($this->iv, 0, $blockSize);
|
{
|
||||||
|
$key = $this->key;
|
||||||
|
$message = $this->plainText;
|
||||||
|
$blockSize = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
|
||||||
|
|
||||||
$encrypted = '';
|
$xPrev = substr($this->iv, $blockSize, strlen($this->iv));
|
||||||
|
$yPrev = substr($this->iv, 0, $blockSize);
|
||||||
|
|
||||||
for ($i=0; $i < strlen($message); $i += $blockSize)
|
$encrypted = '';
|
||||||
{
|
|
||||||
|
|
||||||
$x = substr($message, $i, $blockSize);
|
for ($i = 0; $i < strlen($message); $i += $blockSize) {
|
||||||
$this->debugLog("x: " . _c($x) . "\n");
|
$x = substr($message, $i, $blockSize);
|
||||||
|
$this->debugLog('x: '._c($x)."\n");
|
||||||
|
|
||||||
$yXOR = $this->exor($x, $yPrev);
|
$yXOR = $this->exor($x, $yPrev);
|
||||||
$this->debugLog("yPrev: " . _c($yPrev) . "\n");
|
$this->debugLog('yPrev: '._c($yPrev)."\n");
|
||||||
$this->debugLog("yXOR: " . _c($yXOR) . "\n");
|
$this->debugLog('yXOR: '._c($yXOR)."\n");
|
||||||
$yFinal = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $yXOR, MCRYPT_MODE_ECB);
|
$yFinal = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $yXOR, MCRYPT_MODE_ECB);
|
||||||
$yFinal = str_pad($yFinal, strlen($xPrev), "\x00");
|
$yFinal = str_pad($yFinal, strlen($xPrev), "\x00");
|
||||||
$this->debugLog("yFinal: " . _c($yFinal) . "\n");
|
$this->debugLog('yFinal: '._c($yFinal)."\n");
|
||||||
$y = $this->exor($yFinal, $xPrev);
|
$y = $this->exor($yFinal, $xPrev);
|
||||||
$this->debugLog("xPrev: " . _c($xPrev) . "\n");
|
$this->debugLog('xPrev: '._c($xPrev)."\n");
|
||||||
$this->debugLog("y: " . _c($y) . "\n");
|
$this->debugLog('y: '._c($y)."\n");
|
||||||
|
|
||||||
$xPrev = $x;
|
$xPrev = $x;
|
||||||
$yPrev = $y;
|
$yPrev = $y;
|
||||||
|
|
||||||
$encrypted .= $y;
|
$encrypted .= $y;
|
||||||
$this->debugLog("Currently encrypted: "._c($encrypted)."\n\n");
|
$this->debugLog('Currently encrypted: '._c($encrypted)."\n\n");
|
||||||
}
|
}
|
||||||
return $encrypted;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function debugLog($message)
|
return $encrypted;
|
||||||
{
|
}
|
||||||
if ($this->debug)
|
|
||||||
echo $message;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function exor($array1, $array2)
|
public function debugLog($message)
|
||||||
{
|
{
|
||||||
$len = (strlen($array1) <= strlen($array2)) ? strlen($array2) : strlen($array1);
|
if ($this->debug) {
|
||||||
|
echo $message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$array1 = str_pad($array1, $len, "\x00");
|
public function exor($array1, $array2)
|
||||||
$array2 = str_pad($array2, $len, "\x00");
|
{
|
||||||
|
$len = (strlen($array1) <= strlen($array2)) ? strlen($array2) : strlen($array1);
|
||||||
|
|
||||||
$res = '';
|
$array1 = str_pad($array1, $len, "\x00");
|
||||||
for ($i=0; $i < $len; $i++)
|
$array2 = str_pad($array2, $len, "\x00");
|
||||||
{
|
|
||||||
$res .= $array1[$i] ^ $array2[$i];
|
|
||||||
}
|
|
||||||
return $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
function _c($binary) {
|
$res = '';
|
||||||
return sprintf("[%s]", chunk_split(bin2hex($binary), 4," ")
|
for ($i = 0; $i < $len; $i++) {
|
||||||
|
$res .= $array1[$i] ^ $array2[$i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function _c($binary)
|
||||||
|
{
|
||||||
|
return sprintf('[%s]', chunk_split(bin2hex($binary), 4, ' ')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user