【问题标题】:mcrypt_encrypt different result in php and iosmcrypt_encrypt 不同的结果在 php 和 ios
【发布时间】:2013-08-10 15:17:29
【问题描述】:

我一直在尝试像这样在 PHP 5.2 中加密一些东西:

$key = "12345678901234567890123456789012345678901234567890123456";//56 chars
$iv = "12345678";//8 chars
$text = "Nick is pooping.";//16 chars

$enc = mcrypt_encrypt("blowfish", $key, $text, "cbc", $iv);

var_dump($enc); echo "<br>";
var_dump(base64_encode($enc)); echo "<br>";

这是输出:

string(16) "–±–%ê„zÆtȾ R" 
string(24) "lrGWJeofhHrGdMi+BiBSHQ==" 

我在 iOS 端使用this,代码如下:

Blowfish* _blowfish = [BlowfishAlgorithm new];
[_blowfish setMode:[BlowfishAlorithm buildModeEnum:@"CBC"]];
[_blowfish setKey:@"12345678901234567890123456789012345678901234567890123456"];
[_blowfish setInitVector:@"12345678"];
[_blowfish setupKey];
NSLog(@"%@",[_blowfish encrypt:@"Nick is pooping."]);

这个输出:

3132333435363738f61e0c4683e55fe061f1951e7a8182be

base64_encode 在 php 中不起作用,我不知道如何匹配它们以使它们输出相同。 :(

【问题讨论】:

  • 我看不到您在 Objective-C 代码中设置了相同的键和初始化向量。
  • 哎呀!我的错——我是手动从 VirtualBox 复制代码,所以我搞砸了——它现在就在那里。
  • 奇怪的事情:如果您将输出解释为十六进制字节,您会得到以下信息:cl.ly/image/2O1Z0H3C0w3L。前 8 个字符是 IV……其余的我不知道。我无法下载您链接到的代码(它要求我注册),我建议您寻找替代实现,以检查该实现是否错误实现。
  • 检查您的字符编码。我敢打赌他们和其他人不一样。
  • PHP 输出到底是什么——它是什么编码?它看起来像一堆乱码和外语字符。我应该如何将其转换为纯文本?我应该对它进行base64编码还是使用bin2hex或pack?处理这个问题的最标准方法是什么?

标签: php ios objective-c mcrypt blowfish


【解决方案1】:

要删除这些空字符,您可以使用 rtrim 函数。运行解密后的输出后,它应该是相等的。

更多信息请参考此链接:

https://stackoverflow.com/a/15352155/516512

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 2016-02-22
    • 2018-08-18
    • 2020-02-02
    • 2013-07-13
    • 1970-01-01
    • 2013-02-25
    相关资源
    最近更新 更多