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
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2014-12-19 依赖注入及AOP简述(十三)——AOP应用举例(完结) .
2014-12-19 依赖注入及AOP简述(十二)——依赖注入对象的行为增强(AOP) .
2014-12-19 依赖注入及AOP简述(十一)——生命周期管理 .
2014-12-19 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .
2014-12-19 依赖注入及AOP简述(九)——单例和无状态Scope .
2014-12-19 依赖注入及AOP简述(八)——混合请求模式 .
2014-12-19 依赖注入及AOP简述(七)——FQCN请求模式