我正在编写一个带有密钥和网址并生成签名的函数。我正在使用hmac-sha1。但我在Android代码和objective-c代码之间有不同的签名:
目标-C:
RuntimeTypeAdapterFactory<BaseMessage> runtimeTypeAdapterFactory = RuntimeTypeAdapterFactory
.of(BaseMessage.class, "type")
.registerSubtype(TextMessage.class,
String.valueOf(MessageType.TEXT_MESSAGE))
.registerSubtype(SystemTextMessage.class,
String.valueOf(MessageType.SYSTEM_MESSAGE))
;
Gson gson = new GsonBuilder().registerTypeAdapterFactory(runtimeTypeAdapterFactory).create();
Type listType = new TypeToken<List<BaseMessage>>(){}.getType();
List<BaseMessage> list = gson.fromJson(json, listType);
机器人:
- (NSString *)hmacsha1:(NSString *)url secretKey:(NSString *)secretKey
{
const char *cKey = [secretKey cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [url 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)];
NSString *hash = [HMAC base64EncodedStringWithOptions:0];
return hash;
}
答案 0 :(得分:0)
对我来说生成 hmac-sha1 字符串的方法与android字符串
完全相同- (NSData *)hmacForKeyAndData:(NSString *)key data:(NSString *)url
{
const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [url cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
return [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
}