0

mcryptWindows 7 でフラット ファイルの値を暗号化および復号化するためにPHP を使用しています。

他の情報なしで値を直接書き込み、ファイルから復号化すると、アルゴリズムは正常に機能します。キーと値のペア ( password=xxxxxx)としてエンコードexplode()し、「=」記号でペアを解析しようとすると、復号化関数は入力されたもの以外のものを返します。

私はtrim()空白を切り取るために使用しており(EOL文字が含まれている可能性があるようです)、キーと値を手動で解析しようとしました。

何も機能していないようです。他の誰かがこの問題を見たことがありますか? もしそうなら、どのようにそれを乗り越えましたか?

コードの暗号化/復号化:

function encrypt ($strToEncrypt) {
    global $td, $iv, $key;

    /* Intialize encryption */
    mcrypt_generic_init($td, $key, $iv);

    /* Encrypt data */
    $encrypted = mcrypt_generic($td,$strToEncrypt);
    echo "encrypted = " . $encrypted . "<BR>";
    return $encrypted;
}

function decrypt($strToDecrypt) {
    global $td, $iv, $key;

    /* Initialize encryption */
    mcrypt_generic_init($td, $key, $iv);

    /* Decrypt data */
    $decrypted = mdecrypt_generic($td, $strToDecrypt);
    return $decrypted; 
}
?>

ファイル操作コード:

include 'libEncryption.php';
$tempStr ="";
$tempStr2="";
try {
    $nextPage = $_REQUEST["NEXTPAGE"];
    switch ($nextPage) 
    {
        case "ENCRYPT":
            echo 'String to encrypt = ' . $_POST["txtSeedStr"] ."<BR>";
            if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                $file = fopen("C:\\temp\\EncryptTest.txt", "wb") or exit("Unable to open file!");
            } else {
                $file = fopen("//home/prem03/EncryptTest.txt", "w") or exit("Unable to open file!");
            }
            fwrite($file, "username=web_app\npassword=");
            $tempStr = encrypt($_POST["txtSeedStr"]);
            fwrite($file, $tempStr, strlen($tempStr));
            fwrite($file, "\n");
            fwrite($file, "DBNAME=DEV11");
            fclose($file);
            break;
        case "DECRYPT":
            if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
                $file = fopen("C:\\temp\\EncryptTest.txt", "rb") or exit("Unable to open file!");
            } else {
                $file = fopen("//home/prem03/EncryptTest.txt", "r") or exit("Unable to open file!");
            }
            if ($file) {
                while (!feof($file)) {
                    $str1=fgets($file);
                    echo "str1 = " . $str1 . "<br>";
                    list($key,$value) = explode("=",$str1);
                    $var1=strlen(trim($value));
                    echo "key = ".$key.' value = '.trim($value) . ' ' . $var1 . "<br />";
                    if ($key == "password") {
                        $var2 = trim($value);
                        $tempStr2 = decrypt($var2);
                        echo 'tempStr2 = ' . $tempStr2 . "<BR>";
                    }
                }

            }
            fclose($file);
            break;
        default:
            break;
    } 
} catch (Exception $ex) {
    echo $ex->getMessage();
}  
?>
4

1 に答える 1

0

私はエラーを見つけました - それは典型的なグリーンホーンの間違いでした。変数 $key を 2 つの異なるコンテキストで使用しました。1 つは変数を使用したい暗号化ライブラリ ファイルで、もう 1 つはファイル操作コードで、文字列に基づいて $key の値を変更しました。爆発。私のロジックの欠陥を明らかにしてくれた NetBeans IDE と xdebug に感謝します。

于 2012-05-31T17:10:40.637 に答える