ios - API 不接受 SHA1 哈希
问题描述
我正在开发一个使用条形码从 API 中提取数据的应用程序。
对于每个调用,我需要生成一个哈希值作为签名。这是我的 API ID 和条形码的组合。我遇到了一个问题,我的哈希值每次都相同,因此我的调用失败了。
创建哈希的函数在 Objective-C 中,我有一个桥,所以我可以在 SwiftUI 中调用它。
NSString+SHA1.m
#import "NSString+SHA1.h"
#import <CommonCrypto/CommonHMAC.h>
@implementation NSString (SHA1)
- (NSString *)hashedValue:(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)];
NSString *hash = [HMAC base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
//Used to be [HMAC base64Encoding], but is now depreciated
return hash;
}
@end
由于 base64Encoding 已被贬值,我尝试改用 base64EncodedStringWithOptions。这可能是错误的,并且可能是为什么我的哈希值每次都相同的原因。
这就是我在 SwiftUI 中的称呼:
let hashedValue = scannedCode.barcode.hashedValue("(API ID)")
扫描代码是一个可观察对象,它将扫描的条形码作为字符串存储在“条形码”下。
在桥接头中:
#import "NSString+SHA1.h"
#import "NSString+SHA1.m"
NSString+SHA1.h
#import <Foundation/Foundation.h>
@interface NSString (SHA1)
- (NSString *)hashedValue:(NSString *)key;
@end
编辑:
我修复了哈希值相同的问题,但 API 仍然不接受我的签名。所以这与计算错误有关。
解决方案
推荐阅读
- python - 如何在python中构建一棵树?
- dynamics-business-central - 如何通过 Business Central 发送发布请求?
- python - 如何从满足条件A或B的pandas DataFrame中选择数据?
- hyperledger-fabric - 从头开始配置 Hyperledger Fabric 网络
- uwp - 使用 UWP 中的可视状态管理器更改网格内的样式
- javascript - 隐藏的 div 会阻止网站上的内容
- python - 基于数据框中列中的值的数据框行的交集
- html - 使用 jquery .append() 在表中创建新行并单击此新创建的行 jquery is not working
- nginx - 从 Kubernetes NodePort 服务进行负载平衡/重定向
- r - Rfacebook searchPages 返回 0 个结果