我基本上是在尝试使用String并在php中执行以下操作:
$signature= base64_encode(hash_hmac('sha1', $data, $secretKey, true));
Run Code Online (Sandbox Code Playgroud)
但是,在Swift中进行操作 ...我看到很多关于其他人试图使用CommonCrypto进行操作的帖子,但是该模块似乎没有安装。
所以确实有3个问题:
我当前的代码如下所示:
var authString:String = "PUT\nTEST=BLAH\nTEST2=BLAHBLAHBLAH"
let hmacResult:String = authString.sha1()
...
extension String {
func sha1() -> String {
//Do Something...
}
}
Run Code Online (Sandbox Code Playgroud)
您绝对应该使用 CommonCrypto,因为它已经在所有设备上可用,经过充分测试且速度很快。您只需要添加一个包含的桥接标头
#import <CommonCrypto/CommonCrypto.h>
Run Code Online (Sandbox Code Playgroud)
如前所述,您可以在此处查找如何添加桥接头。
要计算 HMAC,您只需要此扩展:
extension String {
func hmac(key: String) -> String {
var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), key, key.count, self, self.count, &digest)
let data = Data(bytes: digest, count: Int(CC_SHA1_DIGEST_LENGTH))
return data.map { String(format: "%02hhx", $0) }.joined()
}
}
Run Code Online (Sandbox Code Playgroud)
例子:
let result = "test".hmac(key: "test")
Run Code Online (Sandbox Code Playgroud)
结果:
0c94515c15e5095b8a87a50ba0df3bf38ed05fe6
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1293 次 |
最近记录: |