php mcrypt解密未按预期工作

php mcrypt解密未按预期工作,php,encryption,mcrypt,Php,Encryption,Mcrypt,在Windows7中,我使用PHPmcrypt将值加密和解密到一个平面文件中 如果我在没有其他信息的情况下直接写入值,然后从文件中解密,那么算法就可以正常工作。如果我尝试将其编码为密钥/值对(password=xxxxxx),并使用explode()解析出“=”符号处的密钥/值对,则解密函数会将放入的内容以外的内容发回 我正在使用trim()来删除任何空白(看起来它可能带有一个EOL字符),并尝试手动解析键和值 似乎什么都没用。还有其他人看到过这个问题吗?如果是,你是如何克服的 加密/解密代码:

在Windows7中,我使用PHP
mcrypt
将值加密和解密到一个平面文件中

如果我在没有其他信息的情况下直接写入值,然后从文件中解密,那么算法就可以正常工作。如果我尝试将其编码为密钥/值对(
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; 
}
?>
函数加密($strotencrypt){
全球$td、$iv、$key;
/*初始化加密*/
mcrypt_generic_init($td,$key,$iv);
/*加密数据*/
$encrypted=mcrypt_generic($td,$strotencrypt);
echo“encrypted=”.$encrypted.
”; 返回$encrypted; } 函数解密($strToDecrypt){ 全球$td、$iv、$key; /*初始化加密*/ mcrypt_generic_init($td,$key,$iv); /*解密数据*/ $decrypted=mdecrypt_generic($td,$strToDecrypt); 返回$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();
}  
?>
包括'libEncryption.php';
$tempStr=“”;
$tempStr2=“”;
试一试{
$nextPage=$_请求[“nextPage”];
交换机($nextPage)
{
案例“加密”:
回显“要加密的字符串=”。$\u POST[“txtsedestr”]。“
”; if(strtoupper(substr(PHP_OS,0,3))=='WIN'){ $file=fopen(“C:\\temp\\EncryptTest.txt”,“wb”)或退出(“无法打开文件!”); }否则{ $file=fopen(“//home/prem03/EncryptTest.txt”,“w”)或退出(“无法打开文件!”); } fwrite($file,“username=web_-app\npassword=”); $tempStr=encrypt($_POST[“txtsedestr”]); fwrite($file、$tempStr、strlen($tempStr)); fwrite($file,“\n”); fwrite($file,“DBNAME=DEV11”); fclose($文件); 打破 案例“解密”: if(strtoupper(substr(PHP_OS,0,3))=='WIN'){ $file=fopen(“C:\\temp\\EncryptTest.txt”,“rb”)或退出(“无法打开文件!”); }否则{ $file=fopen(“//home/prem03/EncryptTest.txt”,“r”)或退出(“无法打开文件!”); } 如果($file){ 而(!feof($file)){ $str1=fgets($file); 回声“str1=”.$str1.“
”; 列表($key,$value)=分解(“=”,$str1); $var1=strlen(修剪($value)); echo“key=”.$key.'value=”.trim($value)。“.$var1.”
; 如果($key==“password”){ $var2=修剪(价值); $tempStr2=解密($var2); 回声“tempStr2=”。$tempStr2。“
”; } } } fclose($文件); 打破 违约: 打破 } }捕获(例外$ex){ echo$ex->getMessage(); } ?>
我发现了错误-这是一个典型的新手错误。我在两个不同的上下文中使用了变量$key——一个是在加密库文件中,这是我想要使用变量的地方,另一个是在文件操作代码中,我根据正在分解的字符串更改了$key的值。感谢NetBeans IDE和xdebug阐明了我的逻辑缺陷。

您能用完整的编码和解码代码更新您的帖子吗?