我对Swift还是比较陌生,我无法使用HMAC和SHA1进行加密
问题解决了!首先,我没有正确使用字符串函数…我最终得到了:
let hmacResult:String = "myStringToHMAC".hmac(HMACAlgorithm.SHA1, key: "myKey")
然后我忘记了我需要对hmac结果进行base64编码。所以我将问题中链接的字符串函数修改为…
enum HMACAlgorithm {
case MD5, SHA1, SHA224, SHA256, SHA384, SHA512
func toCCHmacAlgorithm() -> CCHmacAlgorithm {
var result: Int = 0
switch self {
case .MD5:
result = kCCHmacAlgMD5
case .SHA1:
result = kCCHmacAlgSHA1
case .SHA224:
result = kCCHmacAlgSHA224
case .SHA256:
result = kCCHmacAlgSHA256
case .SHA384:
result = kCCHmacAlgSHA384
case .SHA512:
result = kCCHmacAlgSHA512
}
return CCHmacAlgorithm(result)
}
func digestLength() -> Int {
var result: CInt = 0
switch self {
case .MD5:
result = CC_MD5_DIGEST_LENGTH
case .SHA1:
result = CC_SHA1_DIGEST_LENGTH
case .SHA224:
result = CC_SHA224_DIGEST_LENGTH
case .SHA256:
result = CC_SHA256_DIGEST_LENGTH
case .SHA384:
result = CC_SHA384_DIGEST_LENGTH
case .SHA512:
result = CC_SHA512_DIGEST_LENGTH
}
return Int(result)
}
}
extension String {
func hmac(algorithm: HMACAlgorithm, key: String) -> String {
let cKey = key.cStringUsingEncoding(NSUTF8StringEncoding)
let cData = self.cStringUsingEncoding(NSUTF8StringEncoding)
var result = [CUnsignedChar](count: Int(algorithm.digestLength()), repeatedValue: 0)
CCHmac(algorithm.toCCHmacAlgorithm(), cKey!, strlen(cKey!), cData!, strlen(cData!), &result)
var hmacData:NSData = NSData(bytes: result, length: (Int(algorithm.digestLength())))
var hmacBase64 = hmacData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding76CharacterLineLength)
return String(hmacBase64)
}
}
这给了我正确的结果
lGCtbW+DNHFraNoxPGK3trgM/98=
使用Express.js框架和密码与pbkdf2散列密码我读到默认算法是HMAC-SHA1,但我不明白为什么它没有升级到其他家族或SHA之一。 我们提供的keylen是我们想要的SHA的变体吗?像SHA-256,512等等? HMAC如何改变输出? 最后,当SHA1断开时,它是否足够坚固? 抱歉,如果我把事情搞混了。
问题内容: 我正在尝试使用网站的OAuth,该网站要求签名方法仅是“ HMAC-SHA1”。 我想知道如何在Python中实现此功能? 问题答案: 假单胞菌: 签名错误通常驻留在基本字符串中,请确保您理解这一点(如OAuth1.0规范在此处所述:http://tools.ietf.org/html/draft-hammer- oauth-10#section-3.4 。 1)。 以下输入用于生成签
问题内容: 我从http://tools.ietf.org/html/rfc6238借用了HMAC- SHA1 Java代码,并稍加修改以对其进行硬编码,以使用一个具有已知输出的已知密钥/消息对。 然后,我尝试在Python中编写相同的代码以验证结果,但是在Python和Java中获得了不同的值。 已知Java值很好。 Java代码: Python代码: 运行Java的结果: 运行Python的结
问题内容: 我从http://tools.ietf.org/html/rfc6238借用了HMAC- SHA1 Java代码,并稍加修改以对其进行硬编码,以使用一个具有已知输出的已知密钥/消息对。 然后,我尝试在Python中编写相同的代码以验证结果,但是在Python和Java中获得了不同的值。 Java值众所周知是好的。 Java代码: Python代码: 运行Java的结果: 运行Pytho
问题内容: 我想创建一个(用键签名)的哈希 如何使用Node.js Crypto创建该哈希? 问题答案: 加密文档:http : //nodejs.org/api/crypto.html