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中不可以对变量使用取地址操作 
  • 相关阅读:
    获取一张表的所有列
    SqlServer查询数据库所有用户表的记录数
    IE和Firefox在JavaScript方面的兼容性(转)
    ASP.NET2.0调用MySql的存储过程
    javascript在中ie与firefox的区别与解决方案(转)
    针对Firefox兼容性,要注意的一些问题 (转)
    JavaScript Import XML Document
    Remote建立分析
    sql2000和文本文件的写入和读取(转)
    firefox与IE对javascript和CSS的区别(转)
  • 原文地址:https://www.cnblogs.com/shuleihen/p/4686343.html
Copyright © 2011-2022 走看看