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

Swift-AES之加密解密的更多相关文章

  1. PHP AES的加密解密

    AES加密算法 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

  2. Golang之AES/DES加密解密

    AES/DES加密/解密涉及4个概念:1. Block, 也叫分组, 相应加密/解密的算法. 2. BlockMode, 模式, 相应加密/解密的处理.3. InitalVectory, 初始向量4. ...

  3. 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  4. AES在线加密解密-附AES128,192,256,CBC,CFB,ECB,OFB,PCBC各种加密解密源码

    一.AES在线加密解密:AES 128/192/256位CBC/CFB/ECB/OFB/PCBC在线加密解密|在线工具|在线助手|在线生成|在线制作 http://www.it399.com/aes ...

  5. PHP7.* AES的加密解密

    之前写过一篇: PHP AES的加密解密-----[弃用] 使用的是php5.*之前的mcrypt_decrypt 函数,该函数已经在php7.1后弃用了,上马的是openssl的openssl_en ...

  6. PHP AES的加密解密-----【弃用】

    mcrypt_decrypt在PHP7.*已经被弃用,取而代之的是openssl_decrypt/encrypt,请参考: PHP7.* AES的加密解密 AES加密算法 密码学中的高级加密标准(Ad ...

  7. PHP 服务端 和 APP 客户端 实现 RSA+AES 双向加密解密

    目的:服务端和移动端双向加密解密 共有七个文件 其中包括三个类文件 lib_aes.php aes对称加密解密类 server_rsa_crypt.php 服务端RSA公钥私钥非对称加密解密类 cli ...

  8. AES对称加密解密类

    import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.Se ...

  9. .NET/android/java/iOS AES通用加密解密(修正安卓)

    移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...

  10. JAVA和PYTHON同时实现AES的加密解密操作---且生成的BASE62编码一致

    终于有机会生产JAVA的东东了. 有点兴奋. 花了一天搞完.. java(关键key及算法有缩减): package com.security; import javax.crypto.Cipher; ...

随机推荐

  1. 合并多个MP4文件

    把多个MP4文件连接起来的方法与音频文件不太一样,比较有效的方法是: $ cat mylist.txt file '/path/to/file1' file '/path/to/file2' file ...

  2. Win2008 Server搭建FTP服务器

    首先创建一个专门的FTP用户,当然也可以不创建. 用系统自带的超管用户. 设置用户名和密码.用户下次登陆必须修改密码记得去掉勾选. 在角色里面的WEB服务器找到添加角色服务.我之前有安装IIS. 没有 ...

  3. GROUP函数

    GROUP_ID 首先我们看看官方的解释: 大意是GROUP_ID用于区分相同分组标准的分组统计结果. 解释起来比较抽象,下面我们来看看具体的案例. 例1:单一分组 SQL> select gr ...

  4. vscode 解决符号无法识别的问题

    一开始浏览代码出现了下面这个问题, __attribute__ 标记为红色,符号无法识别,下面还出现了很多提示需要加 ), } 等符号,虽然编译没问题,但是看着红色标记和一堆提示真是要逼死强迫症. 既 ...

  5. poj2325 大数除法+贪心

    将输入的大数除以9 无法整除再除以 8,7,6,..2,如果可以整除就将除数记录,将商作为除数继续除9,8,...,3,2. 最后如果商为1 证明可以除尽 将被除过的数从小到大输出即可 #includ ...

  6. 初入lambda表达式 (主要是c++11)

    写一篇不猫的博文吧 定义 lambda表达式的定义如下 [capture](parameters) mutable ->return-type{statement} 翻译成人话就是 1.[cap ...

  7. Overload重載和Override重写的区别。Overloaded的方法是否可以改变返回值的类型?

    Overload是重载的意思,Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Ove ...

  8. STM32F407 新建基于固件库的项目模板

    1.新建文件夹如图: 2.新建项目在USER文件夹中,选cpu如图: 若再弹出窗口, 直接点cancel 3.删了这俩文件夹: 4.复制文件到fwlib: src 存放的是固件库的.c 文件, inc ...

  9. 【转】关于LIS和一类可以用树状数组优化的DP 预备知识

    原文链接 http://www.cnblogs.com/liu-runda/p/6193690.html 预备知识 DP(Dynamic Programming):一种以无后效性的状态转移为基础的算法 ...

  10. Thinkphp5.0 的请求方式

    Thinkphp5.0 的请求方式 方法一(使用框架提供的助手函数): public function index(){ $request = request(); dump($request); } ...