Используя и AES256Crypter
, и Rijndael
, я получил шифрование и дешифрование AES-256.
Добавьте код по этой ссылке: https://github.com/superk589/RijndaelSwift
class StringCipher {
static func Encrypt(plainText : String, passPhrase : String) -> String {
var result = ""
let salt = AES256Crypter.randomSalt()
let iv = AES256Crypter.randomSalt()
let saltByte = [UInt8](salt)
let ivByte = [UInt8](iv)
do {
let key = try AES256Crypter.createKey(password: passPhrase.data(using: .utf8)!, salt: salt)
let r = Rijndael(key: key, mode: .cbc)!
let decryptedData = r.encrypt(data: plainText.trimmed().data(using: .utf8)!, blockSize: 32, iv: iv)
let dataBypte = [UInt8](decryptedData!)
let mainByte = saltByte + ivByte + dataBypte
// print(mainByte.count)
let plainData = Data(bytes: mainByte)
result = (plainData.base64EncodedString())
// print(result)
}
catch {
print("Failed")
print(error)
}
return result
}
static func Decrypt( cipherText : String, passPhrase : String) -> String {
var result = ""
do {
let bData = cipherText.data(using: .utf8)!
if let nsData = NSData(base64Encoded: cipherText, options: .ignoreUnknownCharacters) {
let bytes = [UInt8](nsData as Data)
// print(bytes, String(bytes: bytes, encoding: .utf8))
// print(bytes.count)
let subArray1 = bytes[0...31]
let subArray2 = bytes[32...63]
let subArray3 = bytes[64...(bytes.count-1)]
let saltData = Data(bytes: subArray1)
let ivData = Data(bytes: subArray2)
let plainData = Data(bytes: subArray3)
/*
print("salt === \(saltData.base64EncodedString())\n\n")
print("IV === \(ivData.base64EncodedString())\n\n")
print("Data === \(plainData.base64EncodedString())\n\n")
*/
let key = try AES256Crypter.createKey(password: passPhrase.data(using: .utf8)!, salt: saltData)
print(key.count)
let r = Rijndael(key: key, mode: .cbc)!
let decryptedData = r.decrypt(data: plainData, blockSize: 32, iv: ivData)
// print("Original: \(String(decoding: decryptedData!, as: UTF8.self))")
result = (String(decoding: decryptedData!, as: UTF8.self)).trimmed()
}
} catch {
print("Failed")
print(error)
}
return result
}
}