1. 程式人生 > >Swift-AES之加密解密

Swift-AES之加密解密

原創部落格,請勿轉載!

什麼是AES

高階加密標準(英語:Advanced Encryption Standard,縮寫:AES),在密碼學中又稱Rijndael加密法,是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界所使用。經過五年的甄選流程,高階加密標準由美國國家標準與技術研究院(NIST)於2001年11月26日釋出於FIPS PUB 197,並在2002年5月26日成為有效的標準。2006年,高階加密標準已然成為對稱金鑰加密中最流行的演算法之一。

Swift怎麼使用

Hash

Cyclic Redundancy Check (CRC)

Cipher
Message authenticators
  • HMAC MD5, SHA1, SHA256
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())

但是對於每次使用都這麼寫的話有些麻煩,我們可以封裝成一個類供我們使用:

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 } }