PLSQL (dbms_crypto.encrypt) を使用して文字列を暗号化し、それを Cookie に保存してから、PHP (mcrypt_decrypt) を使用して Cookie を読み取り、文字列を復号化しようとするアプリケーションがあります。文字列を復号化するのにかなりの時間を費やしています。うまくいけば、誰かが以前にこれを行ったことがあり、私を助けることができますか?
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;
/
私の読みが正しければ、データは CBC と PKCS5 による DES を使用して暗号化されています。コードからの出力は次のとおりです。
Original : Cookie@Data@Goes@Here
Encrypted : 3CB6F761112AE388DDA1AE973042D08472B06C2170587D5E
PHP は明らかに MCRYPT_decode を使用していますが、正しい出力を得られないようです。仕事の一部を行うスクリプトをまとめましたが、出力は常にエンコードされているように見えます。私の問題は、すべてのオプションが実際に何を意味するのかについて、私が十分に理解していないことです。CBC と PKCS5 は私には少しギリシャ語です。また、問題の一部はテキスト エンコーディング (HEX vs 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
どんな助けでも大歓迎です。この小さな問題は、はるかに大きなプロジェクトを遅らせています。
前もって感謝します。