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中不可以对变量使用取地址操作

浙公网安备 33010602011771号