美文网首页
Swift3中3DES加密

Swift3中3DES加密

作者: 小胖QAQ | 来源:发表于2017-05-25 11:05 被阅读292次

一. 导入CommonCrypto库

1.建立桥接文件
  1. command + n 新建file,选择Header File
  2. 依次点击项目TARGETS , Build Settings , 搜索bridging,配置路径(路径格式:项目名+桥接文件名称)
    截图如下:
image.png image.png
2.在桥接文件中导入CommonCrypto库

#import <CommonCrypto/CommonCrypto.h>

二. Triple DES 代码

extension String {
    
    /**
     3DES的加密过程 和 解密过程
     
     - parameter op : CCOperation: 加密还是解密
     CCOperation(kCCEncrypt)加密
     CCOperation(kCCDecrypt) 解密
     
     - parameter key: 加解密key
     - parameter iv : 可选的初始化向量,可以为nil
     - returns      : 返回加密或解密的参数
     */
    func tripleDESEncryptOrDecrypt(op: CCOperation,key: String,iv: String) -> String? {
        
        // Key
        let keyData: NSData = key.data(using: String.Encoding.utf8, allowLossyConversion: true) as NSData!
        let keyBytes         = UnsafeMutableRawPointer(mutating: keyData.bytes)
        
        var data: NSData!
        if op == CCOperation(kCCEncrypt) {//加密内容
            data  = self.data(using: String.Encoding.utf8, allowLossyConversion: true) as NSData!
        }
        else {//解密内容
            data =  NSData(base64Encoded: self, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters)!
        }
        
        let dataLength    = size_t(data.length)
        let dataBytes     = UnsafeMutableRawPointer(mutating: data.bytes)
        
        // 返回数据
        let cryptData    = NSMutableData(length: Int(dataLength) + kCCBlockSize3DES)
        let cryptPointer = UnsafeMutableRawPointer(mutating: cryptData?.bytes)
        let cryptLength  = size_t(cryptData!.length)
        
        //  可选 的初始化向量
        let viData :NSData = iv.data(using: String.Encoding.utf8, allowLossyConversion: true) as NSData!
        let viDataBytes    = UnsafeMutableRawPointer(mutating: viData.bytes)
        
        // 特定的几个参数
        let keyLength              = size_t(kCCKeySize3DES)
        let operation: CCOperation = UInt32(op)
        let algoritm:  CCAlgorithm = UInt32(kCCAlgorithm3DES)
        let options:   CCOptions   = UInt32(kCCOptionPKCS7Padding)
        
        var numBytesCrypted :size_t = 0
        
        let cryptStatus = CCCrypt(operation, // 加密还是解密
            algoritm, // 算法类型
            options,  // 密码块的设置选项
            keyBytes, // 秘钥的字节
            keyLength, // 秘钥的长度
            viDataBytes, // 可选初始化向量的字节
            dataBytes, // 加解密内容的字节
            dataLength, // 加解密内容的长度
            cryptPointer, // output data buffer
            cryptLength,  // output data length available
            &numBytesCrypted) // real output data length
        
        
        
        if UInt32(cryptStatus) == UInt32(kCCSuccess) {
            
            cryptData!.length = Int(numBytesCrypted)
            if op == CCOperation(kCCEncrypt)  {
                let base64cryptString = cryptData?.base64EncodedString(options: NSData.Base64EncodingOptions.lineLength64Characters)
                return base64cryptString
            }
            else {
                let base64cryptString = String.init(data: cryptData! as Data, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
                return base64cryptString
            }
        } else {
            print("Error: \(cryptStatus)")
        }
        return nil
    }
}

三. 使用3DES加解密方法

        let key = "这里写入秘钥"
        let iv = "这里写入初始化向量(可以为nil)"
        
        let text = "这里写入加密内容"
        var encryptText:String?
        var decrptText:String?
        encryptText = text.tripleDESEncryptOrDecrypt(op: CCOperation(kCCEncrypt), key: key, iv: iv)
        decrptText = encryptText?.tripleDESEncryptOrDecrypt(op: CCOptions(kCCDecrypt), key: key, iv: iv)
        print("加密内容:"+(encryptText ?? "加密失败")+"\n解密内容:"+(decrptText ?? "解密失败"))

相关文章

  • Swift3中3DES加密

    一. 导入CommonCrypto库 1.建立桥接文件 command + n 新建file,选择Header F...

  • Android Des/3DES加解密

    1、3DES加解密 DES加密分为 单DES和 3DES加密 单DES加密是8个字节长度加密 3DES加密分为:双...

  • iOS常用加解密方式

    AES128 AES128加密 AES128解密 3DES 3DES加密 3DES解密 DES DES加密 DES解密

  • 密码学及iOS签名(一) —— 加密解密

    加密解密类型 对称加密 公钥密码(非对称加密) 对称加密(常见的DES、 3DES、AES) 在对称密码中,加密、...

  • 面试题总结

    1. iOS开发中的加密方式 iOS加密相关算法框架:CommonCrypto。 对称加密: DES、3DES、A...

  • android 3DES加密和MD5加密

    经常使用加密算法:DES、3DES、RC4、AES,RSA等;对称加密:des,3des,aes非对称加密:rsa...

  • Android 加密解密的几种方式总结

    经常使用加密算法:DES、3DES、RC4、AES,RSA等; 对称加密:des,3des,aes 非对称加密:r...

  • 3DES加密

    本文介绍了3DES加密特性,加密特点,3DES是对称加密,用一个密钥对内容进行加密,必须使用相同的密钥进行解密, ...

  • 3DES企业级加密与解密

    一、加密方案 HTTP请求参数以json密文传输使用3DES方式加密,3DES(data,KEY,IV),其中da...

  • iOS之DES加密

    项目是使用3DES算法,ECB分组加密模式。我们后端使用的加密过程:对明文进行十六进制编码,在使用3DES加密。i...

网友评论

      本文标题:Swift3中3DES加密

      本文链接:https://www.haomeiwen.com/subject/tpvaxxtx.html