2014-10-15 4 views
1

PLSQL (dbms_crypto.encrypt)을 사용하여 문자열을 암호화하고 쿠키에 저장 한 다음 PHP (mcrypt_decrypt)를 사용하여 쿠키를 읽고 해독하는 응용 프로그램이 있습니다. 끈. 해독 할 문자열을받는 데 시간이 많이 걸리고 있습니다. 누군가가 전에이 일을하고 나를 도울 수 있기를 바라십니까?PLSQL을 사용하여 문자열을 암호화 한 다음 PHP를 사용하여 암호 해독

다음은 PLSQL 코드입니다 : 내가 제대로 읽고 있어요, 데이터는 CBC와 PKCS5로 DES를 사용하여 암호화하는 경우

set serveroutput on 

set linesize 121 

DECLARE 
cookieInfo VARCHAR2(500) := '[email protected]@[email protected]'; 
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; 
/

(오라클 11에서 실행). 다음 코드의 출력입니다 :

Original : [email protected]@[email protected] 
Encrypted : 3CB6F761112AE388DDA1AE973042D08472B06C2170587D5E 

PHP는 분명히 MCRYPT_decode를 사용하지만 나는 출력 권리를 얻을 수없는 것. 작업의 일부인 스크립트를 함께 연결했지만 결과가 항상 인코딩 된 것처럼 보입니다. 내 문제는 모든 옵션이 실제로 의미하는 바를 실제로 빠르게 할 수는 없다는 것입니다. CBC와 PKCS5는 나에게 조금 그리스어이다. 또한 문제의 일부가 텍스트 인코딩 (HEX 대 RAW/BIN) 일 수도 있습니다. 나는 혼란 스럽다고 생각한다. (PHP 5.3.10에서 실행)

<?php 
    $input = "[email protected]@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 

여기 내 PHP 코드입니다. 이 작은 문제는 훨씬 더 큰 프로젝트를 견디고 있습니다.

미리 감사드립니다.

답변

0

데이터가 16 진수이므로 해독을 위해 데이터를 bin으로 다시 변환해야합니다. 암호 해독 후 bin2hex를 변환 할 필요는 없습니다.

$input = "[email protected]@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

아름다움! 감사! 그게 속임수 야. – Fotan

관련 문제