首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将JavaScript HMAC代码转换为CryptoSwift实现?

如何将JavaScript HMAC代码转换为CryptoSwift实现?
EN

Stack Overflow用户
提问于 2017-12-23 19:03:39
回答 2查看 342关注 0票数 1

我想使用CryptoSwift库将这个Swift HMAC代码转换成JavaScript。

代码语言:javascript
复制
var crypto = require("crypto");
var currentDate = Moment.utc().format("YYYYMMDDHH");
var hmac = crypto.createHmac("sha256", "secretTokenKey123");
hmac.update(currentDate);
var code = hmac.digest("hex").toUpperCase();

做到这一点的最好方法是什么?

这是我尝试过的,但没有返回正确的代码:

代码语言:javascript
复制
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyyMMddHH"
    let dateString = formatter.string(from: Date())
    let baseString = secretToken + dateString
    print(baseString.sha256().uppercased())

我也尝试过了,但它返回了相同的错误代码

代码语言:javascript
复制
    var digest = SHA2(variant: .sha256)
    var bytes: Array<UInt8>?
    do {
        _ = try digest.update(withBytes: secretToken.bytes)
        _ = try digest.update(withBytes: dateString.bytes)
        bytes = try digest.finish()
    } catch {}
    if let result = bytes?.toHexString().uppercased() {
        print(result)
    }

我还尝试直接从CryptoSwift使用HMCA。但是我不知道我需要验证什么消息:

代码语言:javascript
复制
HMAC(key: secretToken.bytes, variant: .sha256).authenticate(???)
EN

回答 2

Stack Overflow用户

发布于 2017-12-23 19:57:19

我自己刚刚发现了解决方案:

代码语言:javascript
复制
HMAC(key: secretToken.bytes, variant: .sha256).authenticate(dateString.bytes).toHexString().uppercased()
票数 2
EN

Stack Overflow用户

发布于 2017-12-28 21:12:08

普通密码中的HAMC SHA256

代码语言:javascript
复制
func hmacSHA256(message:Data, key:Data) -> Data {
    var macData = Data(count: Int(CC_SHA256_DIGEST_LENGTH))

    macData.withUnsafeMutableBytes {macBytes in
        message.withUnsafeBytes {messageBytes in
            key.withUnsafeBytes {keyBytes in
                CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256),
                       keyBytes,     key.count,
                       messageBytes, message.count,
                       macBytes)
            }
        }
    }
    return macData
}

let clearData = "clearData0123456".data(using:.utf8)!
let keyData   = "keyData8901234562".data(using:.utf8)!
let hmacData  = hmacSHA256(message:clearData, key:keyData)
print("hmacData: \(String(describing: hmacData as NSData))")

fcc487ce7dc1115a69a37dc3710610a87ad2fc9c85e2e0a52f0e7ee1dc9407c1 :hmacData

注意:

在桥接报头中包括#import <CommonCrypto/CommonCrypto.h>

Security.framework添加到项目

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47951935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档