美文网首页
swift5.0 使用3DES对用户信息加密

swift5.0 使用3DES对用户信息加密

作者: WillowRivers | 来源:发表于2020-05-12 18:41 被阅读0次

前言: app 中经常遇到把用户信息保存到本地文件中的需求,然而如果手机越狱通过砸壳,那么这些文件就会完全暴露。所以需要对这些内容进行加密。(本文参考: https://www.jianshu.com/p/6348210aeeb7)

DEMO地址:https://github.com/gree180160/KeyChainDemo

工具定义:

importFoundation

importCommonCrypto

public struct KeychainWrapper {

    private static let keyChain = "hjjjjjjjjjeevvooll@#$%^&*()"

    private static let iv = ""

    /**

     3DES的加密过程 和 解密过程

     - parameter op: CCOperation: 加密还是解密

     CCOperation(kCCEncrypt)加密

     CCOperation(kCCDecrypt) 解密

     - parameter key: 专有的key,一个钥匙一般

     - parameter iv: 可选的初始化向量,可以为nil

     - returns      : 返回加密或解密的参数

     */

    private static func threeDESEncryptOrDecrypt(op: CCOperation, sourceString: String?) -> String? {

        guardsourceString!=nilelse{

            returnnil

        }

        // Key

        let keyData: NSData = ((keyChain as NSString).data(using: String.Encoding.utf8.rawValue) as NSData?)!

        letkeyBytes        =UnsafeMutableRawPointer(mutating: keyData.bytes)

        // 加密或解密的内容

        vardata:NSData=NSData()

        if op == CCOperation(kCCEncrypt) {

            data  = ((sourceString!asNSString).data(using:String.Encoding.utf8.rawValue)asNSData?)!

        }

        else{

            data =  NSData(base64Encoded: sourceString!, options:NSData.Base64DecodingOptions.ignoreUnknownCharacters)!

        }

        letdataLength    =size_t(data.length)

        letdataBytes    =UnsafeMutableRawPointer(mutating: data.bytes)

        // 返回数据

        letcryptData    =NSMutableData(length:Int(dataLength)+kCCBlockSize3DES)

        let cryptPointer = UnsafeMutableRawPointer(cryptData!.mutableBytes)

        letcryptLength  =size_t(cryptData!.length)

        //  可选 的初始化向量

        let viData :NSData = ((iv as NSString).data(using: String.Encoding.utf8.rawValue) as NSData?)!

        letviDataBytes    =UnsafeMutableRawPointer(mutating: viData.bytes)

        // 特定的几个参数

        letkeyLength              =size_t(kCCKeySize3DES)

        letoperation:CCOperation=UInt32(op)

        letalgoritm:  CCAlgorithm = UInt32(kCCAlgorithm3DES)

        letoptions:  CCOptions  =UInt32(kCCOptionPKCS7Padding)

        varnumBytesCrypted :size_t=0

        letcryptStatus =CCCrypt(operation,// 加密还是解密

            algoritm,// 算法类型

            options,  // 密码块的设置选项

            keyBytes,// 秘钥的字节

            keyLength,// 秘钥的长度

            viDataBytes,// 可选初始化向量的字节

            dataBytes,// 加解密内容的字节

            dataLength,// 加解密内容的长度

            cryptPointer,// output data buffer

            cryptLength,  // output data length available

            &numBytesCrypted)// real output data length

        ifUInt32(cryptStatus)==UInt32(kCCSuccess) {

            cryptData!.length=Int(numBytesCrypted)

            if op == CCOperation(kCCEncrypt)  {

                letbase64cryptString = cryptData?.base64EncodedString(options: .lineLength64Characters)

                returnbase64cryptString

            }

            else{

                letbase64cryptString =String(data: cryptData!asData, encoding:String.Encoding(rawValue:String.Encoding.utf8.rawValue))

                returnbase64cryptString

            }

        }else{

           returnnil

        }

    }

    static func threeDESEncrypt(sourceString: String?) -> String? {

        threeDESEncryptOrDecrypt(op: CCOperation(kCCEncrypt), sourceString: sourceString)

    }

    static func threeDESDecrypt(decryptStr: String?) -> String? {

        threeDESEncryptOrDecrypt(op: CCOperation(kCCDecrypt), sourceString: decryptStr)

    }

}

使用:

 func testCrypt() {

        letsourceStr ="hello swift"

        letdecrypStr =KeychainWrapper.threeDESEncrypt(sourceString: sourceStr)

        letresult =KeychainWrapper.threeDESDecrypt(decryptStr: decrypStr)

        ifresult==sourceStr {

            print("success")

        }else{

            print("fail")

        }

    }

相关文章

  • swift5.0 使用3DES对用户信息加密

    前言: app 中经常遇到把用户信息保存到本地文件中的需求,然而如果手机越狱通过砸壳,那么这些文件就会完全暴露。所...

  • iOS之DES加密

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

  • 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...

  • Android Des/3DES加解密

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

  • 对称加密

    常见的对称加密算法有: DES 数据加密标准 3DES 使用3个秘钥,对相同的数据执行3次加密,强度增强 A...

  • iOS常用加解密方式

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

  • iOS逆向-09:对称加密

    对称加密 加密解密使用同一个KEY常见的三个 DES 数据加密标准(用的少,强度不够) 3DES 使用三个密钥,对...

网友评论

      本文标题:swift5.0 使用3DES对用户信息加密

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