おしぼりエンジニアブログ

おしぼり会社のボンボンがエンジニアで頑張っているお話

【CryptoSwift】iOS Digest認証 ①【SHA256 / HMAC】

お久しぶりです。前回の投稿からもう早2年以上経ちます。早いですね...。
現在はアプリ開発チームに所属しており、SwiftやらKotlinを書いてます。
iOS13は破壊的な変更が多く、その中にSHA256の返却値とアルゴリズムが少し変わったことで、使えなくなるケースがありました。
そのため、今回はDigest認証について書くことにしました。

早速ですが、Digest認証はいくつか方法があり、Part別でやっていこうと思ってます。
今回は、SwiftCrypto というThirdPartyLibraryについてになります。
SHA256やHMACの内容自体は割愛します。

CryptoSwift とは?

様々な暗号化に対応していて、簡単にHMACやSHA256できるライブラリ。
スター数も7000以上あり、更新頻度やコミニティも活発。
CocoaPodsCarthageSwift Package Managerにも対応しています。

github.com

How to

CocoaPodsを使用してやっていこうと思います。

CocoaPods

まずはCocosPodsに記載して、pods installしてライブラリを入れましょう

pod 'CryptoSwift', '~> 1.0'

SHA256の場合

String型からでも、Data型でもどちらでも可能です。

import CryptoSwift

// String
var dataStr = "hash化したい文字列"
let StringDigest = dataStr.sha256() // SHA256化した文字列

// Data
let data = dataStr.data(using: .utf8)
let dataDigest = data.sha256() // SHA256化した文字列

//  Array<UInt8>
let byte = dataStr.bytes
let byteDigest = byte.sha256()  // SHA256化した文字列

Bytesの場合は別の書き方も可能です。

let bytes:Array<UInt8> = [0x01, 0x02, 0x03]
let digest = Digest.sha256(bytes)

HMAC(SHA256)の場合

import CryptoSwift

// StringからHash
let dataStr = "hash化したい文字列"
guard let hmac = try? HMAC(key: "任意のSecretKey", variant: .sha256).authenticate(dataStr.bytes) else {
    return
}
print(hmac.hexString()) // hash化した文字列

最後に

CryptoSwiftを使うと容易に暗号化が出来ちゃうので、便利ですね。
iOS13が破壊的な変更が多く、対応に追われているアプリエンジニアが多いと思いますが、一緒に乗り切りましょう...。笑