Osheep

时光不回头,当下最重要。

用Swift 进行AES 加密、解密

最近在公司在用Swift 翻 oc 的项目,由于原来的加密方式都是用OC写的,现在要Swift

发篇文章,大家以后进行加密的时候,希望可以方便一些,不用再这么费劲

1.导入第三方库CryptoSwift
import CryptoSwift
CryptoSwift源码地址

算了,话不多说,直接上代码
    public static func Endcode_AES_ECB(strToEncode:String)->String {
        // 从String 转成data
        let data = strToEncode.data(using: String.Encoding.utf8)
        
        // byte 数组
        var encrypted: [UInt8] = []
        do {
            encrypted = try AES(key: key, iv: iv, blockMode: .CBC, padding: PKCS7()).encrypt(data!.bytes)
        } catch AES.Error.dataPaddingRequired {
        } catch {
            // error
        }
        
        let encoded = NSData.init(bytes: encrypted, length: encrypted.count)
        //加密结果要用Base64转码
        return encoded.base64EncodedString(options: NSData.Base64EncodingOptions.lineLength64Characters)
    }
    
    
//  MARK:  AES-ECB128解密
    public static func Decode_AES_ECB(strToDecode:String)->String {
        //解码 base64
        let data = NSData(base64Encoded: strToDecode, options: NSData.Base64DecodingOptions.init(rawValue: 0))
        
        // byte 数组
        var encrypted: [UInt8] = []
        // 把data 转成byte数组
        for i in 0..<16 {
            var temp:UInt8 = 0
            data?.getBytes(&temp, range: NSRange(location: i,length:1 ))
            encrypted.append(temp)
        }
        // decode AES
        var decrypted: [UInt8] = []
        do {
            decrypted = try AES(key: key, iv: iv, blockMode:.CBC, padding: PKCS7()).decrypt(encrypted)
        } catch AES.Error.dataPaddingRequired {
        } catch {
            // error
        }
        
        // byte 转换成NSData
        let encoded = NSData.init(bytes: decrypted, length: decrypted.count)
        var str = ""
        //解密结果从data转成string
        str = String(data: encoded as Data, encoding: String.Encoding.utf8)!
        return str
    }

DEMO地址
后续还会更新其他加密方式 ,以及原生加密等等,大家如果写了其他的加密,可以@我一下,一起学习

点赞