Swift-AES之加密解密

什么是AES

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

Swift怎么使用

使用CryptoSwift框架https://github.com/krzyzanowskim/CryptoSwift
其所支持的加密解密方式

Hash

Cyclic Redundancy Check (CRC)

Cipher
Message authenticators
Cipher block mode
  • Electronic codebook (ECB)
  • Cipher-block chaining (CBC)
  • Propagating Cipher Block Chaining (PCBC)
  • Cipher feedback (CFB)
  • Output Feedback (OFB)
  • Counter (CTR)
Data padding

按照github上的提示安装导入后可以直接调用

try AES(key: key, iv: iv, blockMode: .ECB).encrypt((ps?.arrayOfBytes())!, padding: PKCS7())
  • 1

但是对于每次使用都这么写的话有些麻烦,我们可以封装成一个类供我们使用:

import CryptoSwift


class DataEncoding: NSObject {

    //AES-ECB128加密
    static func Endcode_AES_ECB(strToEncode:String)->String
    {

        let ps = strToEncode.dataUsingEncoding(NSUTF8StringEncoding)

        var encrypted: [UInt8] = []

        let key: [UInt8] = ("YourKey".dataUsingEncoding(NSUTF8StringEncoding)?.arrayOfBytes())!
        let iv: [UInt8] = []

        do {
            encrypted = try AES(key: key, iv: iv, blockMode: .ECB).encrypt((ps?.arrayOfBytes())!, padding: PKCS7())



        } catch AES.Error.BlockSizeExceeded {
            // block size exceeded
        } catch {
            // some error
        }

        let encoded = NSData.init(bytes: encrypted)


        //加密结果要用Base64转码
        return encoded.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
    }


        //AES-ECB128解密
    static func Decode_AES_ECB(strToDecode:String)->String
    {
        //decode base64
        let data = NSData(base64EncodedString: strToDecode, options: NSDataBase64DecodingOptions.init(rawValue: 0))

        let encrypted = data!.arrayOfBytes()



        var decrypted: [UInt8] = []

        let key: [UInt8] = ("YourKey".dataUsingEncoding(NSUTF8StringEncoding)?.arrayOfBytes())!
        let iv: [UInt8] = []

        do {

            decrypted = try AES(key: key, iv: iv, blockMode: .ECB).decrypt(encrypted, padding: PKCS7())



        } catch AES.Error.BlockSizeExceeded {
            // block size exceeded
        } catch {
            // some error
        }

        let encoded = NSData.init(bytes: decrypted)


        var str = ""
        //解密结果要从Base64转码回来
        str = String(data: encoded, encoding: NSUTF8StringEncoding)!

        return str
    }



    //字符串sha1值
    static func Encode_SHA1(str:String)->String
    {

        let data = NSData.init(bytes: (str.dataUsingEncoding(NSUTF8StringEncoding)?.arrayOfBytes())!)

        var sha1 = data.sha1String()

        print(sha1)
        return sha1

    }
}
原文地址:https://www.cnblogs.com/Free-Thinker/p/8067371.html