sha1 key 생성 및 hash 처리 - kirseia/study GitHub Wiki
테스트 페이지
swift 코드
import CommonCrypto
import Foundation
enum HmacAlgorithm {
case sha1, md5, sha256, sha384, sha512, sha224
var algorithm: CCHmacAlgorithm {
var alg = 0
switch self {
case .sha1:
alg = kCCHmacAlgSHA1
case .md5:
alg = kCCHmacAlgMD5
case .sha256:
alg = kCCHmacAlgSHA256
case .sha384:
alg = kCCHmacAlgSHA384
case .sha512:
alg = kCCHmacAlgSHA512
case .sha224:
alg = kCCHmacAlgSHA224
}
return CCHmacAlgorithm(alg)
}
var digestLength: Int {
var len: Int32 = 0
switch self {
case .sha1:
len = CC_SHA1_DIGEST_LENGTH
case .md5:
len = CC_MD5_DIGEST_LENGTH
case .sha256:
len = CC_SHA256_DIGEST_LENGTH
case .sha384:
len = CC_SHA384_DIGEST_LENGTH
case .sha512:
len = CC_SHA512_DIGEST_LENGTH
case .sha224:
len = CC_SHA224_DIGEST_LENGTH
}
return Int(len)
}
}
extension String {
func sha1() -> String {
guard let data = self.data(using: .utf8) else {
preconditionFailure()
}
var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA1($0.baseAddress, CC_LONG(data.count), &digest)
}
let hexBytes = digest.map { String(format: "%02hhx", $0) }
let sha1Key = hexBytes.joined()
return sha1Key
}
func hmac(algorithm: HmacAlgorithm = .sha1, key: String) -> String {
var digest = [UInt8](repeating: 0, count: algorithm.digestLength)
CCHmac(algorithm.algorithm, key, key.count, self, self.count, &digest)
let data = NSData(bytes: digest, length: digest.count)
return hexStringFromData(input: data)
}
private func hexStringFromData(input: NSData) -> String {
var bytes = [UInt8](repeating: 0, count: input.length)
input.getBytes(&bytes, length: input.length)
var hexString = ""
for byte in bytes {
hexString += String(format:"%02x", UInt8(byte))
}
return hexString
}
}