🐾
CryptoKitで文字列の暗号化と復号化を行う
暗号化
class CryptoUtil {
// 暗号化
static func encrypt(string: String, key: SymmetricKey) throws -> Data {
let data = string.data(using: .utf8)!
let sealedBox = try AES.GCM.seal(data, using: key)
return sealedBox.combined!
}
}
復号化
class CryptoUtil {
// 復号化
static func decrypt(ciphertext: Data, key: SymmetricKey) throws -> String {
let sealedBox = try AES.GCM.SealedBox(combined: ciphertext)
let data = try AES.GCM.open(sealedBox, using: key)
return String(data: data, encoding: .utf8)!
}
}
使い方
let plainText = "Hello, World!"
// キーの生成
let key = SymmetricKey(size: .bits256)
// 暗号化
let cipherText = try CryptoUtil.encrypt(string: plainText, key: key)
print("暗号文", cipherText.base64EncodedString())
// 復号化
let decrypt = try CryptoUtil.decrypt(ciphertext: cipherText, key: _key)
print("復号文", decrypt)
キーの文字列化
extension SymmetricKey {
// String型からキーにする
init?(base64EncodedString string: String) {
guard let data = Data(base64Encoded: string) else {
return nil
}
self.init(data: data)
}
// キーをString型にする
func serialize() -> String {
return self.withUnsafeBytes { body in
Data(body).base64EncodedString()
}
}
}
こちらの引用です。
SymmetricKeyとStringの相互変換
let key = SymmetricKey(size: .bits256)
// キーの文字列化
let stringValue = key.serialize()
// 文字列からキーの生成
let _ = SymmetricKey(base64EncodedString: stringValue)!
キーはローカルに保存しておかないと、復号できなくなるのでString型にできるようにしました。

株式会社 カラビナテクノロジーは「命綱や支点を素早く確実に繋ぐカラビナ。そんなカラビナのような役割をテクノロジーで実現したい」という想いのもと、福岡で設立。 主にシステム開発・アプリ開発・ Webサイト制作を行っています。採用情報→karabiner.tech/recruit/requirements/
Discussion