есть пример генерации ключа на java
signature = Base64.encode(HMAC_SHA1.digest(data, Base64.decode(client_secret)))
Данные для генерации
data = "3tme3bnmepmibhvv1toq4xfed866faaa06aa1b13979653502956"
secret_key = "0gkp7n6tnwdn816kyzfp26s3e"
на выходе нужно получить
result = 1WVoLPXcqJVKaxSK50ArFHtKtnM=
пробовал реализовать вот так
extension Data {
func hmacsha1(key: String) -> String? {
guard let keyData = Data(base64Encoded: key) else {
return nil
}
var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
self.withUnsafeBytes({ dataBytes in
keyData.withUnsafeBytes({ keyDataBytes in
CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), keyDataBytes, keyData.count, dataBytes, keyData.count, &digest)
})
})
return Data(bytes: digest).base64EncodedString()
}
}
let data = Data("Test".utf8)
let key = Data("Key".utf8).base64EncodedString()
let hmac = data.hmacsha1(key: key)
result = zWYYH5p8jUn6cAHjP+oB6IbOUuU=
Попробуйте:
extension String {
func hmacSha1(with key: String) -> String {
let cKey = key.cString(using: String.Encoding.utf8)
let cData = self.cString(using: String.Encoding.utf8)
var result = [CUnsignedChar](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
let length : Int = Int(strlen(cKey!))
let data : Int = Int(strlen(cData!))
CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), cKey!,length , cData!, data, &result)
let hmacData:NSData = NSData(bytes: result, length: (Int(CC_SHA1_DIGEST_LENGTH)))
var bytes = [UInt8](repeating: 0, count: hmacData.length)
hmacData.getBytes(&bytes, length: hmacData.length)
return Data(bytes).base64EncodedString()
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Требуется написать запрос, в котором мы получим все Calculate по условию поля state = true, при этом, чтобы связанный список Client был взят тоже по условию...