三种常见的加密技术:3DES、SHA1、MD5。其中3DES和SHA1为对称加密,MD5为非对称加密。
加密
我们可以做的加密措施有哪些?
- 对设备中存储的内容进行加密,开发者经常使用的UserDefaults、plist文件、CoreData框架等作为存储数据的载体,在存入数据之前做一些加密以增强数据的安全性是很有必要的。
- 对网络传输的数据进行加密,大部分的引用都需要进行网络通讯,由于网络传输的过程中的一些中间节点并不可控,所以必然存在着数据泄漏的风险,对敏感信息进行加密以保证用户的隐私权是很有必要的。
- 对账户密码进行加密:加盐(salt)在密码学中是指,通过密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这个过程称之为加盐。加盐后的账户密码再经过诸如MD5等方式加密,然后与服务器采用同样的加盐和加密的密码进行比较,若两个密码相同,则密码匹配成功。这样无论在客户端还是服务器端,当传输的密码被截获后,即便是解密成功,也无法还原出原始的密码。
3DES加密
DES数据加密标准。
3DES三重数据加密算法,即对每个数据块应用三次DES加密算法。
由于随着计算机的发展,计算机的算力有了很大的提升,而3DES通过增加DES的密钥长度来避免破解,而不是设计一种全新的块密码算法。
在swift中使用3DES函数需要 import CommonCrypto。
private let randomStringArray:[Character] = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".map({
$0})
var key:String = ""
func randomStringOfLength(length:Int) -> String {
var string = ""
for _ in 1...length {
string.append(randomStringArray[Int(arc4random_uniform(UInt32(randomStringArray.count)-1))])
}
print("randomStringLength:\(length)")
print("randomStringArray:\(randomStringArray)")
print("randomString:\(string)")
return string
}
func encrypt(encryptData:String) -> () {
//从key参数到bytesDecrypted参数,都是为了生成CCCrypt方法参数的值。
key = randomStringOfLength(length: 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)+kCCBlockSize3DES)!
let bufferPointer = UnsafeMutableRawPointer(bufferData.mutableBytes)
let bufferLength = size_t(bufferData.length)
var bytesDecrypted = Int(0)
let cryptStatus = CCCrypt(UInt32(kCCEncrypt), UInt32(kCCEncrypt), UInt32(kCCOptionECBMode+kCCOptionPKCS7Padding), keyBytes, keyLength,