繁体   English   中英

PHP和Objective C Blowfish加密编码不同

[英]PHP and Objective C Blowfish Encryption Encoding different

我正在研究的iOS和Android项目要求我们打开连接到第三方网站的网络视图。 问题是我们调用的URL必须带有一些参数,这些参数是使用带有ECB模式的Blowfish加密的。

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

基于此,在我的iOS项目中,我使用FclBlowfish库( https://github.com/cantecim/FclBlowfish )加密/解密数据。

完成所有操作后,加密/解密无法正常工作,而我刚刚发现的问题是,在进行了将近5个小时的工作后,iOS中的加密几乎与PHP相同,但是由于河豚会生成怪异的字符,因此其中一些未被iOS处理,导致解密无法正常进行。

一个例子是:

在PHP中,我的加密字符串是p%FE& ¶4!ɢߟén™但是在iOS中,正如您所见,相同的加密字符串是p%FE&¶4!É¢ßén ,iOS缺少Ÿ ,因此最终加密的字符串不同,因此PHP无法正确解密。

我在iOS上使用的代码是:

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

[bf encrypt:@"21988882121" withMode:modeEBC withPadding:paddingZero]

该lib使用的加密/解密代码可以在以下网址查看: https : //github.com/cantecim/FclBlowfish/blob/master/FclBlowfish.m

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中不可解密。

谢谢!

UPDATE

因此,我打开了FclBlowfish代码,看到它们在Encryption和Decryption方法中使用了NSISOLatin1StringEncodingNSASCIIStringEncoding Encoding,然后我决定尝试其他方法,并发现使用NSWindowsCP1252StringEncoding实际上会返回正确的编码,与PHP一样,并且解密工作正常像个魅力!

好,

重新阅读我的文章以查看是否忘记了任何信息后,我发现如果问题出在编码方面,那么iOS库可能使用的NSEncoding可能与实际情况有所不同。

因此,我打开了FclBlowfish代码,看到它们在Encryption和Decryption方法中使用了NSISOLatin1StringEncodingNSASCIIStringEncoding Encoding,然后我决定尝试其他方法,并发现使用NSWindowsCP1252StringEncoding实际上会返回正确的编码,与PHP一样,并且解密工作正常像个魅力!

希望这对遇到同样问题的人有所帮助!

IV必须具有ascii字符。 因此,您可以简单地对其进行base64编码。有关更多信息,我对您的问题发表了评论: https : //github.com/cantecim/FclBlowfish/issues/1#issuecomment-77517878

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM