gpt4 book ai didi

PHP 和 Objective C Blowfish 加密编码不同

转载 作者:行者123 更新时间:2023-11-29 10:32:34 25 4
gpt4 key购买 nike

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

这个第 3 方使用 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]

该库使用的加密/解密代码可见: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 中不可解密。

谢谢!

更新

所以我打开 FclBlowfish 代码,看到他们在加密和解密方法中使用了 NSISOLatin1StringEncodingNSASCIIStringEncoding 编码,然后我决定尝试其他几个和发现使用 NSWindowsCP1252StringEncoding 实际上会返回与 PHP 编码相同的正确编码,并且解密非常有效!

最佳答案

嗯,

在重新阅读我的帖子以查看是否忘记了任何信息后,我发现如果问题出在编码上,那么 iOS 库可能使用了与它应该不同的 NSEncoding。

所以我打开 FclBlowfish 代码,看到他们在加密和解密方法中使用了 NSISOLatin1StringEncodingNSASCIIStringEncoding 编码,然后我决定尝试其他几个和发现使用 NSWindowsCP1252StringEncoding 实际上会返回与 PHP 编码相同的正确编码,并且解密非常有效!

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

关于PHP 和 Objective C Blowfish 加密编码不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28891658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com