gpt4 book ai didi

php - 随机生成的 PHP IV 在 IOS 中不能完美运行

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

问题是 base 64 编码的 iv(在 PHP 中)在 IOS 中解码时不匹配

场景是我正在使用 Blowfish 算法 CBC 模式。简单的服务器(PHP)生成一个随机的加密IV并编码成base64格式,发送到IOS。问题出在这里,当我尝试解码时,解码结果总是不正确。有时它会生成正确的和其余时间的错误。

Here is my PHP code.

public function ivGenerator()
{
$ivSize = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
echo base64_encode($iv);

}

这是 ivGenerator 的两个结果集,稍后我将用于解码

bTpkpLxMbNo=
aIvJeujxW7w=

Here is my IOS code .

NSString *ecodedIVString = @"bTpkpLxMbNo=";    
NSData *ecodedIVData= [[NSData alloc] initWithBase64EncodedString:ecodedIVString options:0];
NSString *decodeIVString = [[NSString alloc] initWithData:ecodedIVData encoding:NSASCIIStringEncoding];
NSLog(@"decodeIVString %@" , decodeIVString); // m:d¤¼LlÚ //its correct

如果我使用 ,

NSString *ecodedIVString = @"aIvJeujxW7w="; 

那么结果是hÉzèñ[¼,但实际结果应该是h‹Ézèñ[¼

我试过了

  NSWindowsCP1252StringEncoding , NSISOLatin1StringEncoding ,      NSUTF8StringEncoding 

但所有这些都无法生成准确的结果(我发现了大约 10 个测试)。

提前致谢!

最佳答案

您应该以十六进制打印出结果,然后进行比较。

两个平台上的编码似乎是相同的(你不应该想当然)所以你得到相同的字符。但是,不确定您使用的字体字体版本 是否显示这些字符。也可能是一个平台显示未知编码序列的 字符,而另一个平台根本不显示任何内容。

这给我们带来了一个基本问题:如果您对随机字节值进行解码,那么您可能会遇到无法转换为字符的字节序列。因此,通过将二进制字符串转换为可打印字符串来比较二进制字符串是不好的。相反,您需要直接比较字节(例如,通过将 IV 保存到 iv.bin 文件)或将它们转换为十六进制。

尽管打印输出不同,但 IV 极有可能是相同的。

关于php - 随机生成的 PHP IV 在 IOS 中不能完美运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540039/

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