【问题标题】:php mcrypt_decrypt() issuephp mcrypt_decrypt() 问题
【发布时间】:2023-03-05 14:38:01
【问题描述】:

我正在使用以下 php 代码从一个页面传递信息..

Index.php 页面:

<?php
include("secure/content/database/db.php");
$sql = mysql_query("SELECT * FROM press");
while($re =  mysql_fetch_array($sql))
{   


$id= (int) $re['id'];                   

$key = "bladeyeshibbir?1%59";

$size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CFB);
$iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM)       

$encrypted_data=mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $id, MCRYPT_MODE_ECB, $iv);

$id = urlencode(base64_encode($encrypted_data));

$page = mysql_real_escape_string(trim($re['pagename']));
$content = mysql_real_escape_string(trim($re['content']));
echo "<li><a href='press.php?id=$id&request=$md'>$page</a></li>";
            }

            ?>

Press.php 页面

<?php
include("secure/content/database/db.php");
include("header.php");

$id = $_REQUEST["id"];
$key = "bladeyeshibbir?1%59#";

$size = mcrypt_get_iv_size(MCRYPT_CAST_256, MCRYPT_MODE_CFB);
$iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM)       

$decrypted_data=mcrypt_decrypt(MCRYPT_3DES, $key, $id, MCRYPT_MODE_CBC, $iv); 
$url_id = base64_decode(urldecode($decrypted_data));

$request = $_REQUEST['request'];

$sql = mysql_query("SELECT * FROM press WHERE id='$url_id'  ");
$re = mysql_fetch_array($sql);

$pagename = mysql_real_escape_string(trim($re['pagename']));
$content = mysql_real_escape_string(trim($re['content']));  

echo "<title>$pagename</title>";

echo $content;

include("fotter.php");

?>  

但是我收到了这个错误:

警告:mcrypt_decrypt() [function.mcrypt-decrypt]:尝试使用 空 IV,不建议在 C:\xampp\htdocs\audock\press.php 中使用 在第 10 行。

其实我想要的是用户看不到查询字符串变量的实际值。

【问题讨论】:

    标签: php mcrypt


    【解决方案1】:

    以零字节 iv 为例

    $encrypted_data=mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $id, MCRYPT_MODE_ECB, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
    

    【讨论】:

      【解决方案2】:

      查看this post。你不应该使用mcrypt_ecbmcrypt_decrypt,你应该使用mcrypt_encrypt。然后,当使用mcrypt_encrypt 加密时,您需要使用mcrypt_create_iv (docs here) 创建一个初始化向量,然后您也应该使用它来解密。

      【讨论】:

      • 您为什么使用自定义 IV 而不是使用 mcryp_create_iv 函数?另外,尝试将相同的 IV 传递给加密和解密函数。
      • “什么都没有”是什么意思?它是否给您同样的错误,是否没有达到您的预期?我在您的代码中看到您不止一次调用 descrypt,因此请尝试注释掉您未使用的调用。另外我不确定mycript_create_iv 是如何工作的,但是你调用它两次(每个文件一次),我不确定它们是否产生相同的输出。你也应该检查一下。
      猜你喜欢
      • 2013-02-25
      • 2017-09-18
      • 2013-10-23
      • 2012-11-10
      • 2014-07-27
      • 1970-01-01
      • 2010-10-12
      • 2012-01-03
      • 2014-09-25
      相关资源
      最近更新 更多