шифрование — зашифруйте строку с помощью PLSQL, затем расшифруйте с помощью переполнения стека

У меня есть приложение, в котором я пытаюсь зашифровать строку с помощью PLSQL (dbms_crypto.encrypt), сохранить ее в cookie, затем прочитать cookie с помощью PHP (mcrypt_decrypt) и расшифровать строку. У меня чертовски много времени, чтобы получить строку для расшифровки. Надеюсь, кто-то делал это раньше и может мне помочь?

Вот код PLSQL: (Работает в Oracle 11)

set serveroutput on

set linesize 121

DECLARE
cookieInfo VARCHAR2(500) := 'Cookie@Data@Goes@Here';
cookieInfo_raw RAW(500) := utl_raw.cast_to_raw(cookieInfo);
l_key     RAW(128) := utl_raw.cast_to_raw('abcdefgh');

l_encrypted_raw RAW(2048);
BEGIN
dbms_output.put_line('Original : ' || cookieInfo);

l_encrypted_raw := dbms_crypto.encrypt(cookieInfo_raw,
dbms_crypto.des_cbc_pkcs5, l_key);

dbms_output.put_line('Encrypted : ' ||
l_encrypted_raw);

END;
/

Если я правильно читаю, данные шифруются с использованием DES с CBC и PKCS5. Вот вывод из кода:

Original : Cookie@Data@Goes@Here
Encrypted : 3CB6F761112AE388DDA1AE973042D08472B06C2170587D5E

PHP, очевидно, использует MCRYPT_decode, но я не могу получить правильный вывод. Я собрал воедино скрипт, который выполняет часть работы, но вывод всегда выглядит закодированным. Моя проблема в том, что я не совсем в курсе того, что на самом деле означают все варианты. CBC и PKCS5 немного греческие для меня. Также кажется, что частью проблемы может быть кодировка текста (HEX против RAW / BIN). Я думаю, что я просто в замешательстве.

Вот мой PHP-код: (Работает на PHP 5.3.10)

<?php
$input = "Matt@Danskine@L00579796";
$key = "abcdefgh";
$data = "DC979D2F301CA90A548B2F749237B5AF783F13A8CBECE03C";
$iv = "";

$decrypt = mcrypt_decrypt(MCRYPT_DES, $key, $data, MCRYPT_MODE_CBC);
$decrypt = bin2hex($decrypt);

$block = mcrypt_get_block_size('des', 'cbc');
echo "BLOCK: ". $block ."<br>";
$pad = ord($decrypt[($len = strlen($decrypt)) - 1]);
echo "PAD: ". $pad ."<br>";
$output = substr($decrypt, 0, strlen($decrypt) - $pad);

echo "OUTPUT: ". $output;
?>

И вывод:

OUTPUT: 793fe26d587e144f140d70e6013374acb082ff9e411

Любая помощь будет принята с благодарностью. Эта маленькая проблема задерживает гораздо больший проект.

Заранее спасибо.

1

Решение

Ваши данные в шестнадцатеричном формате, и вам нужно преобразовать их обратно в корзину для расшифровки. Нет необходимости конвертировать bin2hex после расшифровки.

$input = "Matt@Danskine@L00579796";
$key = "abcdefgh";
$data = "DC979D2F301CA90A548B2F749237B5AF783F13A8CBECE03C";
$iv = "";

/*
* Convert hex to bin data
*
* This code is courtesy of "Johnson"* http://php.net/manual/en/function.hex2bin.php#110973
* Not needed if you have PHP > 5.4
* Then you can just use hex2bin() builtin
*/
$data = hextobin($data);

$decrypt = mcrypt_decrypt(MCRYPT_DES, $key, $data, MCRYPT_MODE_CBC);

$block = mcrypt_get_block_size('des', 'cbc');
echo "BLOCK: ". $block ."<br>";
$pad = ord($decrypt[($len = strlen($decrypt)) - 1]);
echo "PAD: ". $pad ."<br>";
$output = substr($decrypt, 0, strlen($decrypt) - $pad);

echo "OUTPUT: ". $output;

function hextobin($hexstr)
{
$n = strlen($hexstr);
$sbin="";
$i=0;
while($i<$n)
{
$a =substr($hexstr,$i,2);
$c = pack("H*",$a);
if ($i==0){$sbin=$c;}
else {$sbin.=$c;}
$i+=2;
}
return $sbin;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]