1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift4でBlowfish(暗号化、復号)

Last updated at Posted at 2019-02-21

とりあえずコピペで動けば良い方へ
※base64で扱いやすい形式にしています

Blowfishについて

ライセンスフリーなブロック暗号
Javaと相性が良い

動作環境

  • Xcode 10.1
  • Swift 4.2.1
  • CryptoSwift 0.14.0

ライブラリの追加

CryptoSwiftを使用します

ソースコード(暗号化、復号)

CBC、PKCS5Paddingで暗号化します

func generateRandom(_ length:Int) -> String{
	let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"
	return String((0...length-1).map{_ in letters.randomElement()!})
}
func encodeBase64(_ array:[UInt8]) -> String {
	let data = Data(bytes: array, count: array.count)
	let base64data = data.base64EncodedData(options: [])
	return String(bytes: base64data, encoding: .utf8) ?? ""
}
func decodeBase64(_ data:String) -> [UInt8]{
	guard let d = Data(base64Encoded: data) else {
		return []
	}
	return Array(d)
}
func encrypt(_ key:String,_ iv:String,_ message:String) -> String{
	let encrypted = try! Blowfish(key: key, iv: iv, padding: .pkcs5).encrypt(Array(message.utf8))
	return encodeBase64(encrypted)
}
func decrypt(_ key:String,_ iv:String,_ encryptedMessage:String) -> String{
	let decrypted = try! Blowfish(key: key, iv: iv, padding: .pkcs5).decrypt(decodeBase64(encryptedMessage))
	return String(bytes: decrypted, encoding: .utf8) ?? ""
}

ソースコード(使用例)

let key = "tekitouPassword"
let iv = generateRandom(Blowfish.blockSize)
let str = "テスト用平文"
let encrypted = encrypt(key, iv, str)
print("暗号化された文字列:" + encrypted) //暗号化された文字列:x+tUnSNNgPPel5uWYO3yozrxd92dLSok
let decrypted = decrypt(key, iv, encrypted)
print("復号された文字列:" + decrypted) //復号された文字列:テスト用平文
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?