IOS加密技术之——3DES加密解密技术(记录)
IOS常用加密技术有三种:3DES、SHA1和MD5。其中,对称加密技术有:3DES和SHA1;非对称加密技术有:MD5;
对称加密:加密解密用的是同一个密钥。
非对称加密:生成公有密钥和私有密钥。一个加密,一个解密。
本篇介绍的是3DES加密解密技术:
1、创建HeaderFile文件My3DES.h。然后,添加以下代码,引用相关的头文件:
#import <CommonCrypto/CommonCrypto.h>
2、在BuildSetting面板中设置Objective-C Bridging Header的Value值为第1步创建的桥接文件所在的位置。比如:项目名/文件名.h。
3、配置好了之后,下面就开始使用了。
import UIKit
class ViewController: UIViewController {
private let randomStringArray:[Character] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".map({$0});
var key:String!;
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let data:Data = encrypt(encryptData: "http://www.baidu.com");
decrypt(inputData: data);
}
func randomStringOfLength(_ length:Int) -> String {
var string = "";
for _ in(1...length) {
string.append(randomStringArray[Int(arc4random_uniform(UInt32(randomStringArray.count) - 1))]);
}
return string;
}
//加密
func encrypt(encryptData:String) -> Data {
key = randomStringOfLength(kCCKeySize3DES);
let inputData:Data = encryptData.data(using: String.Encoding.utf8)!;
let keyData:Data = key.data(using: String.Encoding.utf8, allowLossyConversion: false)!;
let keyBytes = UnsafeMutableRawPointer(mutating: (keyData as NSData).bytes);
let keyLength = size_t(kCCKeySize3DES);
let dataLength = Int(inputData.count);
let dataBytes = UnsafeRawPointer((inputData as NSData).bytes);
let bufferData = NSMutableData(length: Int(dataLength) + kCCKeySize3DES)!;
let bufferPointer = UnsafeMutableRawPointer(bufferData.mutableBytes);
let bufferLength = size_t(bufferData.length);
var bytesDecrypted = Int(0);
let cryptStatus = CCCrypt(
UInt32(kCCEncrypt),
UInt32(kCCAlgorithm3DES),
UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding),
keyBytes,
keyLength,
nil,
dataBytes,
dataLength,
bufferPointer,
bufferLength,
&bytesDecrypted
);
if Int32(cryptStatus) == Int32(kCCSuccess) {
bufferData.length = bytesDecrypted;
print("encrypt success");
} else {
print("加密过程出错\(cryptStatus)");
}
return bufferData as Data;
}
//解密
func decrypt(inputData:Data) {
let keyData:Data = key.data(using: String.Encoding.utf8, allowLossyConversion: false)!;
let keyBytes = UnsafeMutableRawPointer(mutating: (keyData as NSData).bytes);
let keyLength = size_t(kCCKeySize3DES);
let dataLength = Int(inputData.count);
let dataBytes = UnsafeRawPointer((inputData as NSData).bytes);
let bufferData = NSMutableData(length: Int(dataLength) + kCCKeySize3DES)!;
let bufferPointer = UnsafeMutableRawPointer(bufferData.mutableBytes);
let bufferLength = size_t(bufferData.length);
var bytesDecrypted = Int(0);
let cryptStatus = CCCrypt(
UInt32(kCCDecrypt),
UInt32(kCCAlgorithm3DES),
UInt32(kCCOptionECBMode + kCCOptionPKCS7Padding),
keyBytes,
keyLength,
nil,
dataBytes,
dataLength,
bufferPointer,
bufferLength,
&bytesDecrypted
);
if Int32(cryptStatus) == Int32(kCCSuccess) {
bufferData.length = bytesDecrypted;
let clearDataAsString = NSString(data: bufferData as Data, encoding: String.Encoding.utf8.rawValue);
print("解密后的内容:\(clearDataAsString! as String)");
} else {
print("解密过程出错\(cryptStatus)");
}
}
}
输出结果为:
encrypt success
解密后的内容:http://www.baidu.com
IOS加密技术之——3DES加密解密技术(记录)相关推荐
- java 3des加密_Java使用3DES加密解密的流程 - 3des加密解密详细解释
Java使用3DES加密解密的流程 ①传入共同约定的密钥(keyBytes)以及算法(Algorithm),来构建SecretKey密钥对象 SecretKey deskey = new Secret ...
- 3des加密 java php_php 3des加密 兼容JAVA 多么痛的领悟呀
最近和别人做接口用到SOCKET TCP/IP方式 其中需要对账号和密码进行3DES加密 对方提供了一个加密比对的软件和JAVA的实现代码 并且给了我们一个长度为32位的密钥 这边需要用PHP来实现! ...
- 3des加密 java php_php 3DES加密如何兼容Java
Java源码: import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKey; im ...
- 加密和解密技术基础、PKI及创建私有CA
一.数据加密和解密概述 数据加密和解密是一门历史悠久的技术,从古代就已经出现了,一直发展到当代.其中,数据加密的目的有很多,可以是为了保证本地数据存取的安全性,可以是为了保证数据流在网络传输过程中的保 ...
- DES和3DES加密易于理解的讲解
下图是DES加密的大致流程,DES是一种64位密钥加密64位明文的加密算法,但是64位密钥中每隔8位就是一位纠错位,所以真正有用的密钥的位数是56位.DES是一一种进行多次加密的对称加密算法,总共要进 ...
- 恶意软件反检测技术简介:模拟器超限技术
恶意软件是一种招人恨的代码,因为它们专干坏事,如泄漏个人隐私.造成数据丢失,等等.而杀毒软件公司则不断想办法检测并阻止恶意软件.如此一来,猫和老鼠的大戏从此开演了.一般来说,杀毒软件要想防御某种恶意软 ...
- 17、加密解密技术介绍
1.通讯机制: 同一主机间通讯机制:IPC.message quence,shm(共享内存),semerphone 不同主机间通讯机制:socket(ip:port),一般来说socket通讯都是成对 ...
- 加密解密技术基础及用OpenSSL创建私有CA
1.加密解密技术基础 (1)进程通信 传输层协议有TCP,UDP,SCTP等,端口号port表示进程地址,进程向内核注册独占使用某端口. 同一主机上的进程间通信方式:进程间通信(IPC), 消息队列( ...
- 加密与解密技术原理(密码学)
加密与解密原理 1. 加密技术发展 加密是利用数学方法将明文转化为密文,从而达到保护数据的目的. 通过加密可保证数据的机密性.完整性.鉴别性.不可否认性. 机密性:通过数据加密实现.只允许特定用户访问 ...
最新文章
- Clean-Code: 注释
- AI检测贫血不看血,竟是看眼睛
- harmonyos开发者邀请码,HarmonyOS 2.0鸿蒙第二期开发者Beta公测申请指南
- Java程序员涨薪必备技能
- [置顶] CopyU!v2插件合集 [2013年7月18日更新]
- SQL性能优化工具TKPROF
- 交换知识 VLAN VTP STP 单臂路由
- Java泛型通配符T,E,K,V
- springboot session超时设置_Spring Boot+Spring Security:获取用户信息和session并发控制...
- VC知识库BLOG-技术,非技术......
- Strip iPhone6
- 爬虫之模拟登录、自动获取cookie值、验证码识别
- java 抽样算法_java生成抽样随机数的多种算法
- 将正方形图片转换成圆形图片
- 跨专业考计算机研究生有专业限制吗,我想跨专业考计算机专业研究生
- 海龟绘图简易教程|Turtle for Python
- python normalize函数_Python normalize包_程序模块 - PyPI - Python中文网
- Apache服务器的下载、安装、配置等等
- 微信转发指定的图文消息到朋友圈(JAVA版)
- 科创人·知乎CTO李大海:技术服务内容、商业化依赖内容,曾被「呵呵」难到挠头