Swift-AES之加密解密
2016-04-16 16:16
1381 查看
原创博客,请勿转载!
其所支持的加密解密方式
SHA1
SHA224
SHA256
SHA384
SHA512
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上的提示安装导入后可以直接调用
但是对于每次使用都这么写的话有些麻烦,我们可以封装成一个类供我们使用:
什么是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
MD5SHA1
SHA224
SHA256
SHA384
SHA512
Cyclic Redundancy Check (CRC)
CRC32CRC16
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 } }
相关文章推荐
- Swift 添加三方库方法(手动&CocoaPods)
- Swift中出现“no such module cocoa”的错误
- OC与Swift混编
- swift新增两种类型
- swift error:Extra argument 'error' in call
- 【Swift学习】Swift编程之旅---集合类型之数组(六)
- 六种语言实现输出乘法口诀表
- Swift 版本很好的卡片切换效果基于ZLSwipeableView(类似于[陌陌点点][探探])
- 在swift中使用自带NSURLConnection请求数据
- Swift开发:弹框(UIAlertController)
- Swift 闭包表达式
- 如何用Swift实现一个好玩的弹性动画
- Swift中编写单例的正确方式
- Swift2-0基础_Deinitialization析构过程
- Swift2-0基础_Initialization(构造过程)
- Swift2-0基础_Inheritance(继承)
- Swift2-0基础_Subscripts(下标脚本)
- Swift2-0基础_Methods(方法)
- Swift2-0基础_Properties(属性)
- Swift2-0基础_ClassAndStructures(类和结构体)