zoukankan      html  css  js  c++  java
  • swift aes 加密

    1、需要引入 libSystem.dylib

    2、添加NSData 类扩展,代码如下

    extension NSData{
        func AES128Crypt(operation:CCOperation,keyData:NSData)->NSData?{
    
            let keyBytes        = keyData.bytes
            let keyLength       = Int(kCCKeySizeAES256)
            
            let dataLength      = self.length
            let dataBytes       = self.bytes
    
            let cryptLength     = Int(dataLength+kCCBlockSizeAES128)
            var cryptPointer    = UnsafeMutablePointer<UInt8>.alloc(cryptLength)
    
            let algoritm:  CCAlgorithm = CCAlgorithm(kCCAlgorithmAES128)
            let option:   CCOptions    = CCOptions(kCCOptionECBMode + kCCOptionPKCS7Padding)
            
            var numBytesEncrypted = UnsafeMutablePointer<Int>.alloc(1)
            numBytesEncrypted.initialize(0)
            
            var cryptStatus = CCCrypt(operation, algoritm, option, keyBytes, keyLength, nil, dataBytes, dataLength, cryptPointer, cryptLength, numBytesEncrypted)
            
            if CCStatus(cryptStatus) == CCStatus(kCCSuccess) {
                let len = Int(numBytesEncrypted.memory)
                var data:NSData = NSData(bytesNoCopy: cryptPointer, length: len)
    
                numBytesEncrypted.dealloc(1)
                return data
                
            } else {
                numBytesEncrypted.dealloc(1)
                cryptPointer.dealloc(cryptLength)
                
                return nil
            }
        }
        
        static func test(){
            let keyString        = "12345678901234567890123456789012"
            let keyData: NSData! = (keyString as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
    
            let message       = "Don´t try to read this text. Top Secret Stuff"
            let data: NSData! = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
            
            let result:NSData? = data.AES128Crypt(CCOperation(kCCEncrypt), keyData: keyData)
            println("encrypt = (result)")
            
            let oldData = result?.AES128Crypt(CCOperation(kCCDecrypt), keyData: keyData)
            println("decrypt = (oldData)")
        }
    }
    
    
    
     
    3、swift中指针的使用
    c/c++中指针对应swift中的UnsafePointer & UnsafeMutablePointer
    UnsafePointer 类型指向的内容不可变;UnsafeMutablePointer 类型指向的内容可以修改
    swift中不可以对变量使用取地址操作 
  • 相关阅读:
    【现代程序设计】【Homework01】
    Apache 关于 mod_rewrite 遇到 %2F或%5C (正反斜杠)等特殊符号导致URL重写失效出现404的问题
    PHP 使用CURL库IP欺骗,隐藏真实客户端IP
    php客服聊天回话系统,长连接加ajax轮询实现
    Which PHP version do I choose
    批量操作,向后台传数组
    angularjs的directive详解
    table中表头不动,表体产生滚动条
    3263232
    forEach、for+i、map的用法及区别
  • 原文地址:https://www.cnblogs.com/shuleihen/p/4686343.html
Copyright © 2011-2022 走看看