gpt4 book ai didi

php - iOS base64 编码返回与 php 不同的结果

转载 作者:行者123 更新时间:2023-11-29 13:27:08 25 4
gpt4 key购买 nike

我正在使用我们自己的网络服务构建一个 iOS 应用程序,但在 iOS 中对数据进行 base64 编码并尝试将其与使用 PHP base64_encode() 函数编码的相同数据进行比较时遇到了一些问题。

iOS 端:

/*
* Generating a hash within an NSData object, which then I try to base64 encode
* making use of the Base64 library included with RestKit.
*/
const char *cKey = [private_key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [password cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
NSString *myHash = [HMAC base64EncodedString];

PHP 端:

$hash = hash_hmac('sha256',$data,$key);
$encoded_hash = base64_encode($hash);

输出如下:

iOS HMAC: <3ae3bbed 508b62aa 9bd8e92e 357e1467 e888cd3d a1ad5aa2 7692db23 5415eb0d>
iOS myHash: OuO77VCLYqqb2OkuNX4UZ+iIzT2hrVqidpLbI1QV6w0=

PHP hash: 3ae3bbed508b62aa9bd8e92e357e1467e888cd3da1ad5aa27692db235415eb0d
PHP encoded_hash: M2FlM2JiZWQ1MDhiNjJhYTliZDhlOTJlMzU3ZTE0NjdlODg4Y2QzZGExYWQ1YWEyNzY5MmRiMjM1NDE1ZWIwZA==

如您所见,当比较 iOS 的 HMAC 和 PHP 哈希时,它们包含相同的字符,但是一旦您对其进行 base64 编码,结果就不一样了。

最佳答案

你的 iOS 是正确的。

PHP 是 string 3ae3bbed508b62aa9bd8e92e357e1467e888cd3da1ad5aa27692db235415eb0d base-64 编码。即这里编码的比特流是那些 ASCII 字符。所以第一个 30x33a0x61,等等。所以你正在编码 0x3361... 实际上。这有意义吗?

对于您想要的 PHP:

$hash = hash_hmac('sha256',$data,$key,true);
$encoded_hash = base64_encode($hash);

这告诉 hash_hmac 返回原始输出而不是十六进制字符串。

关于php - iOS base64 编码返回与 php 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12842725/

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