您的位置:首页 > 移动开发 > Swift

Swift-AES之加密解密

2016-04-16 16:16 1321 查看
原创博客,请勿转载!

什么是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

MD5

SHA1

SHA224

SHA256

SHA384

SHA512

Cyclic Redundancy Check (CRC)

CRC32

CRC16

Cipher

AES-128, AES-192, AES-256

ChaCha20

Rabbit

Message authenticators

Poly1305

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

PKCS#7

按照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

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: