#️⃣

Swift Cryptoで文字列をSHA512のハッシュ値の文字列に変換する方法

2025/02/22に公開

概要

集約のIDを、漏れてほしくない文字列のハッシュ値にして保存したいことがあり、その際にSwiftでSHA512でハッシュ化した文字列する方法を調べたのでその備忘録です

結論

Package.swift
// swift-tools-version:6.0
import PackageDescription

let package = Package(
    name: "core",
    platforms: [
        .macOS(.v15)
    ],
    dependencies: [
        .package(url: "https://github.com/apple/swift-crypto.git", from: "3.0.0"),
    ],
    targets: [
        .target(
            name: "Core",
            dependencies: [
                .product(name: "Crypto", package: "swift-crypto")
            ]),
        .testTarget(
            name: "CoreTests",
            dependencies: [
                .target(name: "Core")
            ]),
    ]
)
hash512String.swift
import Crypto
import Foundation

/// ``Data``をSHA512の16進数のハッシュ値に変換します。
/// - Parameter plainText: 平文
/// - Returns: ハッシュ値
func hash512String(_ plainText: Data) -> String {
    SHA512.hash(data: plainText).reduce(into: "") { string, byte in
        string += String(format: "%02X", byte)
    }
}
hash512StringTests.swift
@testable import Core
import Foundation
import Testing

@Test func DataをSHA512の16進数のハッシュ値にできる() async throws {
    let plainText = "Hello, World!"
    let data = Data(plainText.utf8)
    
    let hashed = hash512String(data)
    
    #expect(hashed == "374D794A95CDCFD8B35993185FEF9BA368F160D8DAF432D08BA9F1ED1E5ABE6CC69291E0FA2FE0006A52570EF18C19DEF4E617C33CE52EF0A6E5FBE318CB0387")
}

Discussion