Swift-AES之加密解密
2023-09-11 14:17:57 时间
什么是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
}
}
相关文章
- 如何设置IMAP、POP3/SMTP及其SSL加密方式?
- 破解TexturePacker加密资源
- 加密解密再也不是你的噩梦
- python 接口加密
- PHP 服务端 和 APP 客户端 实现 RSA+AES 双向加密解密
- lua 加密解密
- A2D JS框架 - DES加密解密 与 Cookie的封装(C#与js互相加密解密)
- Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
- RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密
- C# 加密–RSA前端与后台的加密&解密
- C# 加密小工具代码实现
- Base64加密与解密
- 一次一密加密解密算法
- md5加密用户登陆遇到的问题及解决办法
- 学习Spring Boot:(十四)spring-shiro的密码加密
- Cipher 使用 RSA非对称加密算法 - 公钥加密后,只有私钥才可以解密,私钥加密后,只有公钥才可以解密 - java具体使用 非对称加密算法 - 总结心得
- python之实现图片加密工具(保护你的小秘密)
- Java:Hutool工具箱之Hutool-crypto加密解密
- 可逆加密解密 Java 代码实例
- MD5的加密和解密(总结)
- 什么是私有密钥密码技术——密钥加密算法采用同一把密钥进行加密和解密