#️⃣
Swift Cryptoで文字列をSHA512のハッシュ値の文字列に変換する方法
概要
集約の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