【Swift】iOS12でSHA-256変換する


どういうことか

iOS13からCryptoKitを使って簡単にSHA-256形式でハッシュ化できるっぽいけどiOS12は対応していないのでなんとかして変換する。

なんとかする

CommonCryptoを使用する。

EncryptionUtil.swift
import CommonCrypto

class EncryptionUtil {

    static func convertToSha256(string: String) -> String {

        var result: [CUnsignedChar]
        let digestLength = Int(CC_SHA256_DIGEST_LENGTH)

        if let cdata = string.cString(using: String.Encoding.utf8) {
            result = Array(repeating: 0, count: digestLength)
            CC_SHA256(cdata, CC_LONG(cdata.count - 1), &result)
        } else {
            fatalError("SHA256の変換に失敗しました")
        }
        return (0..<digestLength).reduce("") {
            $0 + String(format: "%02hhx", result[$1])
        }
    }
}

このクラスに文字列を投げて変換する。

// 呼び出して変換
print(EncryptionUtil.convertToSha256(string: "パスワード"))

// 変換後
// d8b076148c939d9d2d6eb60458969c486794a4c0fcf0632be58fa5bf6d15aafa

SHA256ハッシュ生成ツールなどを使って比べてみると同じものが出力されてるはず。
おわり(´・ω・`)

参考