2017-06-07 19 views
0

我使用Xcode和swift 3.1最小的方式來獲得HMAC SHA512斯威夫特3.1

我需要創建hmac sha512哈希我的API調用服務器編碼的應用程序。

我知道有各種框架,如CryptoSwift,爲我們提供這樣的功能。

但是我很想知道是否可以使用本地xcode/swift 3.1而不使用任何庫或框架。

如果不是那麼爲什麼不呢?

此外,如果我確實需要使用該庫,那麼只有基於hmac sha512的庫代碼的最小方法是什麼?

謝謝。

+3

當然這是可能的。這只是數學。查找算法並編寫它。 :) –

+0

或將其從CryptoSwift中提取出來,其中包括Swift中的SHA-512,而在其下面沒有框架。 https://github.com/krzyzanowskim/CryptoSwift/blob/master/Sources/CryptoSwift/SHA2.swift –

回答

2

你一定要使用CommonCrypto,因爲它已經在每個設備上都可用了,經過了很好的測試並且速度很快。你只需要添加含有

#import <CommonCrypto/CommonCrypto.h> 

一個橋接報你可以看一下here如何添加橋接頭。

然後,您可以用一個簡單的擴展(SWIFT 4)計算的HMAC:

extension String { 

    func hmac(key: String) -> String { 
     var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)) 
     CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA256), key, key.count, self, self.count, &digest) 
     let data = Data(bytes: digest) 
     return data.map { String(format: "%02hhx", $0) }.joined() 
    } 

} 

例子:

let result = "test".hmac(key: "test") 

結果:

88cd2108b5347d973cf39cdf9053d7dd42704876d8c9a9bd8e2d168259d3ddf7