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