Swift-AES之加密解密
阿新 • • 發佈:2019-02-17
原創部落格,請勿轉載!
什麼是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
}
}