|
//
// AES.swift
// PaiAi
//
// Created by LISA on 2017/6/1.
// Copyright © 2017年 yb. All rights reserved.
//
import UIKit
private let key = "i29g8au38U3dI8dj"
private let iv = "a2k49g8wJ3F3kf9k"
// MARK: AES
extension Data {
fileprivate func AES(operation: CCOperation, key: String, iv: String) -> Data? {
var digest_length = Swift.max(self.count * 2, 16)
var digest = [UInt8](repeating: 0, count: digest_length)
//AES encrypt
let status = CCCrypt(operation, CCAlgorithm(kCCAlgorithmAES128),
CCOptions(kCCOptionPKCS7Padding),
key.bytes, key.lengthOfBytes(using: .utf8),
iv.bytes,
self.arrayOfBytes(), self.arrayOfBytes().count,
&digest, digest.count, &digest_length)
if status == CCCryptorStatus(kCCSuccess) {
return Data(bytes: digest, count: digest_length)
}
return nil
}
func AES128EncryptToData() -> Data {
return self.AES(operation: CCOperation(kCCEncrypt), key: key, iv: iv)!
}
func AES128EncryptToBase64Data() -> Data {
return self.AES128EncryptToData().base64EncodedData()
}
func AES128EncryptToBase64String() -> String {
return self.AES128EncryptToData().base64EncodedString()
}
func AES128DecryptFromBase64DataToData() -> Data {
return Data(base64Encoded: self)!.AES128DecryptToData()
}
func AES128DecryptFromBase64DataToString() -> String {
return Data(base64Encoded: self)!.AES128DecryptToString()
}
func AES128DecryptToData() -> Data {
return self.AES(operation: CCOperation(kCCDecrypt), key: key, iv: iv)!
}
func AES128DecryptToString() -> String {
return String.init(data: self.AES128DecryptToData(), encoding: String.Encoding.utf8) ?? ""
}
}
extension String {
func AES128EncryptToData() -> Data {
return self.myData.AES128EncryptToData()
}
func AES128EncryptToBase64Data() -> Data {
return self.myData.AES128EncryptToBase64Data()
}
func AES128EncryptToBase64String() -> String {
return self.myData.AES128EncryptToBase64String()
}
func AES128DecryptFromBase64StringToData() -> Data {
return (Data(base64Encoded: self)?.AES128DecryptToData())!
}
func AES128DecryptFromBase64StringToString() -> String {
return (Data(base64Encoded: self)?.AES128DecryptToString())!
}
}
|