-
-
Save yutelin/f4f66e0c78474db1de51 to your computer and use it in GitHub Desktop.
import Foundation | |
import CryptoSwift | |
extension String { | |
func aesEncrypt(key: String, iv: String) throws -> String{ | |
let data = self.dataUsingEncoding(NSUTF8StringEncoding) | |
let enc = try AES(key: key, iv: iv, blockMode:.CBC).encrypt(data!.arrayOfBytes(), padding: PKCS7()) | |
let encData = NSData(bytes: enc, length: Int(enc.count)) | |
let base64String: String = encData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)); | |
let result = String(base64String) | |
return result | |
} | |
func aesDecrypt(key: String, iv: String) throws -> String { | |
let data = NSData(base64EncodedString: self, options: NSDataBase64DecodingOptions(rawValue: 0)) | |
let dec = try AES(key: key, iv: iv, blockMode:.CBC).decrypt(data!.arrayOfBytes(), padding: PKCS7()) | |
let decData = NSData(bytes: dec, length: Int(dec.count)) | |
let result = NSString(data: decData, encoding: NSUTF8StringEncoding) | |
return String(result!) | |
} | |
} |
was it AES-128?If its not can you fix it,please?
How do you decrypt this in PHP?
How do you encrypt with PHP to be able to decrypt it in SWIFT?
Here what we have to pass as input parameters for key and iv.
I tried to convert to Swift 3.0.2 as follows:
extension String {
func aesEncrypt(_ key: String, iv: String) throws -> String? {
guard let data = self.data(using: String.Encoding.utf8) else {
return nil
}
let enc = try AES(key: key, iv: iv, blockMode:.CBC).encrypt(data)
let encData = Data(bytes: enc, count: Int(enc.count))
let base64String: String = encData.base64EncodedString(options: Data.Base64EncodingOptions.init(rawValue: 0))
let result = String(base64String)
return result
}
func aesDecrypt(_ key: String, iv: String) throws -> String? {
guard let data = Data(base64Encoded: self, options: NSData.Base64DecodingOptions(rawValue: 0)) else {
return nil
}
let dec = try AES(key: key, iv: iv, blockMode:.CBC).decrypt(data)
let decData = Data(bytes: dec, count: Int(dec.count))
let result = NSString(data: decData, encoding: String.Encoding.utf8.rawValue)
return String(result!)
}
}
Can you check the version above?
How to use this code?
let data : String = blablabla
data = data.aesEncrypt(_ key: key, iv: iv)?
it?
Hello,
When i import "CryptoSwift" to my class, error showing.
Which framework will added to my project when i import "CryptoSwift"?
@sourmarsi you need to use pods and added this https://github.com/krzyzanowskim/CryptoSwift
@imadeit thank you =)
i get this error: Argument labels '(key:, iv:, blockMode:)' do not match any available overloads
in
let enc = try AES(key: key, iv: iv, blockMode:.CBC).encrypt(data)
=(
@ginppian
I'm no expert and am having many issues as well with this implementation, but the way to fix your line is this:
let enc = try AES(key: key, blockMode: .CBC(iv: iv)).encrypt(data)
I have an encrypted text which is encrypted using AES-128 (given by other person). I want to decrypt the same in Swift(for IOS). Anyone have any idea how to use this? I just have an encrypted text and a Password for the same.. Please help...
am also facing this error
Argument labels '(key:, iv:, blockMode:)' do not match any available overloads
func aesDecrypt(key: String, iv: String) throws -> String {
let data = NSData(base64Encoded: self, options: NSData.Base64DecodingOptions(rawValue: 0))
let dec = try AES(key: key, iv: iv, blockMode:.CBC).decrypt(data!.arrayOfBytes(), padding: .pkcs7)
let decData = NSData(bytes: dec, length: Int(dec.count))
let result = NSString(data: decData, encoding: NSUTF8StringEncoding)
return String(result!)
}
Did anyone found a solution for this error? Argument labels '(key:, iv:, blockMode:)' do not match any available overloads
in swift 5 ???? not works
Swift 5.2
func cryptoSwiftAESEncrypt(key: String, iv: String ) -> String? {
guard let dec = try? AES(key: key, iv: iv, padding: .pkcs7).encrypt(Array(self.utf8)) else { return nil }
let decData = Data(bytes: dec, count: Int(dec.count)).base64EncodedString(options: .lineLength64Characters)
return decData
}
func cryptoSwiftAESDecrypt(key: String, iv: String) -> String? {
guard let dec = try? AES(key: key, iv: iv, padding: .pkcs7).decrypt(Array(self.utf8)) else { return nil }
let decData = Data(bytes: dec, count: Int(dec.count)).base64EncodedString(options: .lineLength64Characters)
return decData
}
I have a bytearray. I want to encrypt it. can i use it instead of a string.
Swift 5.2
func cryptoSwiftAESEncrypt(key: String, iv: String ) -> String? { guard let dec = try? AES(key: key, iv: iv, padding: .pkcs7).encrypt(Array(self.utf8)) else { return nil } let decData = Data(bytes: dec, count: Int(dec.count)).base64EncodedString(options: .lineLength64Characters) return decData }
func cryptoSwiftAESDecrypt(key: String, iv: String) -> String? { guard let dec = try? AES(key: key, iv: iv, padding: .pkcs7).decrypt(Array(self.utf8)) else { return nil } let decData = Data(bytes: dec, count: Int(dec.count)).base64EncodedString(options: .lineLength64Characters) return decData }
cryptoSwiftAESDecrypt is not working and show some error related to DataPadding or Vector. I forgot original error after editing the method, but the encrypted String is base64 encoded, so I decoded it into Data first, before passing as byte array to decrypt.
Feel free to correct me. I am posting this just in case someone has similar error.
func cryptoSwiftAESDecrypt(key: String, iv: String) -> String? {
guard let data = Data(base64Encoded: self),
let dec = try? AES(key: key, iv: iv, padding: .pkcs7).decrypt(data.bytes) else { return nil }
let decData = Data(bytes: dec, count: Int(dec.count))
return String(data: decData, encoding: .utf8)
}
@seonar22 How do Decrypt without IV? because i don't have IV.
I just have a string and KEY for decryption.
Awesome extension, very handy!
I was linked here through a SO question, for those having errors like:
"Block size and Initialization Vector must be the same length", or
"Unknown AES variant for given key."
It took me way longer than I'd admit to figure out so I thought I might save someone some time: