Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP和Objective C河豚加密编码不同_Php_Ios_Encryption_Cryptography_Blowfish - Fatal编程技术网

PHP和Objective C河豚加密编码不同

PHP和Objective C河豚加密编码不同,php,ios,encryption,cryptography,blowfish,Php,Ios,Encryption,Cryptography,Blowfish,我正在从事的iOS和Android项目要求我们打开一个连接到第三方网站的webview。问题是我们调用的URL必须附带一些使用Blowfish和ECB模式加密的参数 这个第三方使用PHP加密/解密参数,他们给了我他们用来加密和解密的代码 基于此,在我的iOS项目中,我使用FclBlowfish库()对数据进行加密/解密 在做了所有事情之后,加密/解密没有正常工作,而我刚刚发现的问题是,经过近5个小时的工作,在iOS中,加密几乎与PHP相同,但由于blowfish生成奇怪的字符,其中一些字符没有被

我正在从事的iOS和Android项目要求我们打开一个连接到第三方网站的webview。问题是我们调用的URL必须附带一些使用Blowfish和ECB模式加密的参数

这个第三方使用PHP加密/解密参数,他们给了我他们用来加密和解密的代码

基于此,在我的iOS项目中,我使用FclBlowfish库()对数据进行加密/解密

在做了所有事情之后,加密/解密没有正常工作,而我刚刚发现的问题是,经过近5个小时的工作,在iOS中,加密几乎与PHP相同,但由于blowfish生成奇怪的字符,其中一些字符没有被iOS处理,使得解密无法工作

例如:

在PHP中,我的加密字符串是
p%FE&^4!爱迪生™但在iOS中,相同的加密字符串是
p%FE&^4!正如你所看到的,iOS缺少了,使最终加密的字符串不同,因此PHP无法正确解密

我在iOS上使用的代码是:

FclBlowfish *bf = [[FclBlowfish alloc] init];
bf.Key = @"MyK3yF8n";
bf.IV = @"aaassss";
[bf prepare];

[bf encrypt:@"21988882121" withMode:modeEBC withPadding:paddingZero]
此lib使用的加密/解密代码可在以下位置查看:

PHP中的代码是:

$initializationVectorSize = mcrypt_get_iv_size(MCRYPT_BLOWFISH, 'ecb');
$initializationVector = mcrypt_create_iv($initializationVectorSize, MCRYPT_RAND);

// Decrypt
$valor = $_GET['v'];
$valor = base64_decode($valor);

$valor = mcrypt_decrypt(MCRYPT_BLOWFISH, 'MyK3yF8n', $valor, 'ecb', $initializationVector);

print 'Valor: ' . $valor;

// Encrypt
$v = mcrypt_encrypt(MCRYPT_BLOWFISH, 'MyK3yF8n', $valor, 'ecb', $initializationVector);

print $v;
如果您能帮助我找出为什么iOS缺少一些字符,使得字符串在PHP中不可解密,我将不胜感激

谢谢

更新

所以我打开了FclBlowfish代码,看到他们在加密和解密方法中使用了nsisolatin1stringecodingNSASCIIStringEncoding编码,然后我决定尝试其他一些方法,并发现使用NSWindowsCP1252StringEncoding实际上返回了正确的编码,就像PHP编码一样,而解密的效果非常好

在重新阅读我的帖子,看看我是否忘记了任何信息后,我突然想到,如果问题是编码,那么iOS库可能会使用与它应该使用的不同的N编码

所以我打开了FclBlowfish代码,看到他们在加密和解密方法中使用了nsisolatin1stringecodingNSASCIIStringEncoding编码,然后我决定尝试其他一些方法,并发现使用NSWindowsCP1252StringEncoding实际上返回了正确的编码,就像PHP编码一样,而解密的效果非常好


希望这能帮助有同样问题的人

IV必须具有ascii字符。因此,您可以简单地对其进行base64编码
欲了解更多信息,我就您的问题写了一条评论:

您最好将此添加到问题中。为什么有带ecb模式的iv?它不带ecb模式的iv,在任何操作开始时都会进行检查,之后它只在cbc模式1中使用iv。使用Blowfish是一个糟糕的主意,AES是当前的加密方法——如果你真的关心安全性的话。2.欧洲央行和iv的结合毫无意义。3验证填充是否以相同的方式完成。4.使用苹果公司提供的通用加密可能是更好的选择,加密在一个标准库中,因此它不会受到编译器问题的影响,并且是可信的代码。@Zaph相信我,当我说我会消灭河豚时,请相信我。但是第三方网站需要河豚,我必须使用它(参见此示例了解Blowfish通用加密实现。