mcrypt_encrypt 不同的结果在 php 和 ios
Posted
技术标签:
【中文标题】mcrypt_encrypt 不同的结果在 php 和 ios【英文标题】:mcrypt_encrypt different result in php and 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?处理这个问题的最标准方法是什么? 【参考方案1】:要删除这些空字符,您可以使用 rtrim 函数。运行解密后的输出后,它应该是相等的。
更多信息请参考此链接:
https://***.com/a/15352155/516512
【讨论】:
以上是关于mcrypt_encrypt 不同的结果在 php 和 ios的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中将 mcrypt_encrypt 转换为 openssl_encrypt
PHP 7.2 中 mcrypt_encrypt 的完全替代品
.NET WebService 加密 -> PHP 解密错误:mcrypt_encrypt(): IV 参数必须与块大小一样长
php使用内置的mcrypt_encrypt和mcrypt_decrypt进行字符串加密解密