【问题标题】:Blowfish decode from a string从字符串中解码河豚
【发布时间】:2012-06-27 12:25:12
【问题描述】:

使用河豚 cbc 模式,我想创建一个加密令牌。当我创建令牌并立即解密它时,它可以正常工作。但是,如果我将加密令牌放在SESSION 中并尝试在后续请求期间对其进行解密,则解密会产生垃圾。

这是我的代码。我正在使用SESSION 进行测试;最终,我会将这些字符串存储在数据库中。

session_start();
define("key","v8nga4r76qlipm111jnioool");
define("iv",substr(md5(uniqid(rand(),1)),0,8));
require_once("Crypt/Blowfish.php");

$str = "Blowfish_test";
// encode start!!
$blowfish = Crypt_Blowfish::factory("cbc", key, iv);
$encrypt = $blowfish->encrypt($str);
$encrypt64 = base64_encode($encrypt);
$_SESSION["test"] = $encrypt64;

到目前为止,一切都是正确的。如果在同一个请求下,我立即解码(来自SESSION),结果符合预期:

// decode start!!
$blowfish = Crypt_Blowfish::factory("cbc", key, iv);
$decrypt64 = base64_decode($_SESSION["test"]);
$decrypt = $blowfish->decrypt($decrypt64);
$trim_decrypt = rtrim($decrypt, "\0");
echo "Before encryption : " . $str ."<br>";
echo "Encrypted string &nbsp&nbsp: " .$encrypt64. "<br>";
echo "decrypted string &nbsp&nbsp: " .$trim_decrypt. "<br>";

如果我只将第二个代码块放在不同的页面上(因此之前生成的字符串正在被解密),那么解密后的字符串就是垃圾。

加密 -> session["test"] -> 解密---没问题

session["test"] -> 解密---问题

这里发生了什么?

【问题讨论】:

  • 嗯,您正在定义 iv,我假设它是您的初始化向量,作为每个请求的一个大随机 blob。它需要在请求中相同。请不要在您的问题中包含 YouTube 视频。我们相信您,我们不需要您描述的症状的视频证据。
  • 首先,感谢您的翻译。在您看来,我能够解决问题。正如您所说,初始化向量值必须以相同的值解密。我能解决问题,谢谢!!所以这可能对某人有用,我添加代码

标签: php base64 session-variables pear blowfish


【解决方案1】:

对于这次超级延迟,我深表歉意。 我当时通过评论解决了这个问题,所以我使用社区wiki关闭了这个问题。

--- 添加 ---
问题解决了

// encode
// At the same time save the initialization vector
$_SESSION["test"] = $encrypt64;
$_SESSION["iv"]   = iv;

--- other file ---
// decode
$blowfish = Crypt_Blowfish::factory("cbc", key, $_SESSION["iv"]);

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多