iPhone开发Swift基础08 加密与安全

本文介绍了在Swift中实现3DES、SHA1和MD5加密的方法,包括加密和解密的过程。文章通过具体代码示例详细解释了如何在iPhone开发中使用这些加密技术来保障数据安全,同时也提到了越狱设备的判定方法。
摘要由CSDN通过智能技术生成

三种常见的加密技术: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,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值