Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- require_once('Aes128CBCEncryptor.php');
- echo PHP_EOL.PHP_EOL.PHP_EOL;
- echo 'Padding oracle attack' . PHP_EOL .PHP_EOL;
- //echo "Tekst: ";
- //$text = fgets(STDIN);
- $text = "Kryptologia to najfajniejszy kurs w roku 2019/2020 119WI2";
- echo "Tekst: " . PHP_EOL;
- echo $text . PHP_EOL .PHP_EOL;
- $cipheredText = Aes128CBCEncryptor::encrypt($text);
- echo "Zaszyfrowany tekst: " . PHP_EOL;
- foreach (str_split($cipheredText, Aes128CBCEncryptor::BLOCK_SIZE) as $block) {
- echo base64_encode($block) . PHP_EOL;
- }
- echo PHP_EOL. '--------' . PHP_EOL .PHP_EOL;
- $blocks = str_split($cipheredText, Aes128CBCEncryptor::BLOCK_SIZE);
- $blockCount = count($blocks);
- $plainText = '';
- for ($i = 0; $i < $blockCount; $i++) {
- if ($blockCount - ($i+2) >= 0) {
- $C = 'aaaaaaaaaaaaaaa';
- $lastXORs = [];
- for ($k = 1; $k <= Aes128CBCEncryptor::BLOCK_SIZE; $k++) {
- for ($m = 1; $m < $k; $m++) {
- $C[Aes128CBCEncryptor::BLOCK_SIZE - $m] = chr($k ^ $lastXORs[$m-1]);
- }
- for ($j = 0; $j < 256; $j++) {
- $C[Aes128CBCEncryptor::BLOCK_SIZE - $k] = chr($j);
- if (Aes128CBCEncryptor::paddingOracleCheck($C . $blocks[$blockCount - ($i+1)])) {
- $paddingXor = ($k ^ $j);
- $lastXORs[] = $paddingXor;
- $decipheredLetter = (ord($blocks[$blockCount - ($i+2)][Aes128CBCEncryptor::BLOCK_SIZE - $k]) ^ $paddingXor);
- $plainText = chr($decipheredLetter) . $plainText;
- continue;
- }
- }
- }
- }
- $plainText = PHP_EOL . $plainText;
- }
- echo 'Odszyfrowane bloki: ';
- echo $plainText;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement