【问题标题】:Php Blowfish decryption scrambling dataphp Blowfish 解密加扰数据
【发布时间】:2012-09-28 20:45:57
【问题描述】:

我正在尝试加密一个 xml 字符串,将其保存在某处,然后稍后解密(在 cbc 模式下使用河豚)。

当我解密字符串时,它会打乱前 4 个字符。

$text = "<?xml version="1.0" encoding="ISO-8859-1"?> ....";
$td = mcrypt_module_open('blowfish', '', 'cbc', '');
$iv = 'kd84h28v';
$ks = mcrypt_enc_get_key_size($td);
$key = substr(md5('randomString1234'), 0, $ks);
mcrypt_generic_init($td, $key, $iv);
$cypher = mcrypt_generic($td, $text);
print mdecrypt_generic($td, $cypher);

# prints: çGÖºÌrsion="1.0" encoding="ISO-8859-1"?>

我会改用ecb 模式——它可以很好地解密——除了当前的 php 实现忽略了 iv。

任何想法我做错了什么?

【问题讨论】:

  • ECB 不支持 IV,它不是实现细节。这就像说“我会骑摩托车,但目前的本田车型没有四个轮子。”

标签: php blowfish encryption-symmetric


【解决方案1】:

来自manual

重新初始化加密缓冲区非常重要 在尝试解密数据之前使用 mcrypt_generic_init()。

所以你可能需要这样的东西:

mcrypt_generic_init($td, $key, $iv);
$cypher = mcrypt_generic($td, $text);
mcrypt_generic_deinit($td);
mcrypt_generic_init($td, $key, $iv);
print mdecrypt_generic($td, $cypher);

【讨论】:

  • 成功了,谢谢。虽然我想知道为什么我不需要它来解密 ecb?
  • 我怀疑这与不同的填充方式有关,但我对 mcrypt 内部结构了解得不够多,无法自信地说明这一点。
猜你喜欢
  • 1970-01-01
  • 2019-05-15
  • 2015-09-25
  • 1970-01-01
  • 2018-12-23
  • 2016-07-25
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多