gpt4 book ai didi

ios - 使用 CommonCrypto 的 NSString 类别在 RubyMotion 中返回 nil

转载 作者:行者123 更新时间:2023-11-29 03:20:15 25 4
gpt4 key购买 nike

我正在尝试使用 CCHmac() 使用 HMAC-SHA1 加密字符串。我创建了一个 NSString 类别为此:

NSString+HMAC.h

#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonHMAC.h>

@interface NSString (HMAC)

- (NSString *)HMACSHA1WithKey:(NSString *)key;

@end

NSString+HMAC.m

#import "NSString+HMAC.h"

@implementation NSString (HMAC)

- (NSString *)HMACSHA1WithKey:(NSString *)key
{
const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [self cStringUsingEncoding:NSUTF8StringEncoding];

unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];

CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);

NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];

return [[NSString alloc] initWithData:HMAC encoding:NSUTF8StringEncoding];
}

@end

我正在使用 RubyMotion 中的这个类别,如下所示:

key = "ZjiUOHkl5tllz2PwaoZYrDRMkg9b43k5CcIOUjSE&"
string = "POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_consumer_key=XXX&oauth_nonce=OWhJeFpZbzRoVU4xck1RTENyN0w4T1J0czNIa01rSVA&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1389974660&oauth_version=1.0"
string.HMACSHA1WithKey(key) # => nil

但是,HMACSHA1WithKey: 方法始终返回 nil...

请问我做错了什么?

最佳答案

SHA-1 算法的结果(存储在 HMAC 中)是一个序列字节,但不是有效的 UTF-8 序列。因此

[[NSString alloc] initWithData:HMAC encoding:NSUTF8StringEncoding]

失败并返回 nil

您可能想要将 NSData *HMAC 转换为包含数据的十六进制表示NSString。有许多可用的解决方案,例如 How to convert an NSData into an NSString Hex string? .

关于ios - 使用 CommonCrypto 的 NSString 类别在 RubyMotion 中返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21190537/

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