генерация base64 swift

321
15 июня 2017, 04:56

есть пример генерации ключа на 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=
Answer 1

Попробуйте:

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()
    }
}
READ ALSO
Высота ListView по содержимому

Высота ListView по содержимому

Есть 2 listViewПричем один внутри другого

317
Помогите с заданием по Java [требует правки]

Помогите с заданием по Java [требует правки]

Очень нужна помощь в решении задания по Java тесту

243
Retrofit error URL query string must not have replace block

Retrofit error URL query string must not have replace block

Делаю такой запрос

313
Jpql двойной запрос

Jpql двойной запрос

Требуется написать запрос, в котором мы получим все Calculate по условию поля state = true, при этом, чтобы связанный список Client был взят тоже по условию...

277