AES加密&;用Swift解密

AES加密&;用Swift解密,swift,aes,Swift,Aes,我想使用AES算法在Swift中加密和解密文本,该算法应该与Android和PHP加密算法兼容。所以,我一直在尝试来自的代码,但结果没有打印任何内容。这是对原始代码稍作修改的代码: var key = "abcdefghijklmnopqrstuvwxyz012345" var iv = "0000000000000000" var plainText = "Hello World" let keyData: NSData! = (key as NSString

我想使用AES算法在Swift中加密和解密文本,该算法应该与Android和PHP加密算法兼容。所以,我一直在尝试来自的代码,但结果没有打印任何内容。这是对原始代码稍作修改的代码:

    var key = "abcdefghijklmnopqrstuvwxyz012345"
    var iv = "0000000000000000"
    var plainText = "Hello World"

    let keyData: NSData! = (key as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
    let keyBytes         = UnsafePointer<UInt8>(keyData.bytes)
    let keyLength        = size_t(kCCKeySizeAES256)

    let plainData = (plainText as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
    let dataLength    = size_t(plainData.length)
    let dataBytes     = UnsafePointer<UInt8>(plainData.bytes)

    var bufferData    = NSMutableData(length: Int(dataLength) + kCCBlockSizeAES128)
    var bufferPointer = UnsafeMutablePointer<UInt8>(bufferData!.mutableBytes)
    let bufferLength  = size_t(bufferData!.length)

    let operation: CCOperation = UInt32(kCCEncrypt)
    let algoritm:  CCAlgorithm = UInt32(kCCAlgorithmAES128)
    let options = UInt32(kCCOptionPKCS7Padding)

    let ivData: NSData! = (iv as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
    let ivPointer = UnsafePointer<UInt8>(ivData.bytes)

    var numBytesEncrypted: UnsafeMutablePointer<Int> = nil
    var cryptStatus = CCCrypt(operation, algoritm, options, keyBytes, keyLength, ivPointer, dataBytes, dataLength, bufferPointer, bufferLength, numBytesEncrypted)

    bufferData!.length = numBytesEncrypted.hashValue
    let base64cryptString = bufferData!.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
    print(base64cryptString)
var key=“abcdefghijklmnopqrstuvxyz012345”
var iv=“0000000000000000”
var plainText=“你好,世界”
让keyData:NSData!=(键为NSString)。数据使用编码(NSUTF8StringEncoding)作为NSData!
让keyBytes=UnsafePointer(keyData.bytes)
let keyLength=大小(kCCKeySizeAES256)
让明文=(明文作为NSString)。dataUsingEncoding(NSUTF8StringEncoding)作为NSData!
设dataLength=size\u t(plainData.length)
让dataBytes=UnsafePointer(plainData.bytes)
var bufferData=NSMutableData(长度:Int(数据长度)+KCCBLOCKSIZEAEAS128)
var bufferPointer=unsafemeutablepointer(bufferData!.mutableBytes)
让bufferLength=size\u t(bufferData!.length)
let操作:cOperation=UInt32(kCCEncrypt)
let算法:CCAlgorithm=UInt32(kCCAlgorithmAES128)
let options=UInt32(kCCOptionPKCS7Padding)
让ivData:NSData!=(iv作为NSString)。数据使用编码(NSUTF8StringEncoding)作为NSData!
设ivPointer=UnsafePointer(ivData.bytes)
var numBytesEncrypted:UnsafeMutablePointer=nil
var cryptStatus=CCCrypt(操作、算法、选项、键字节、键长度、ivPointer、数据字节、数据长度、缓冲指针、缓冲长度、numBytesEncrypted)
缓冲数据!。长度=numBytesEncrypted.hashValue
让base64cryptString=bufferData!。base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
打印(base64cryptString)

我错过什么了吗?请帮忙!如果你知道如何解决这个问题,或者得到了一些AES加密和解密的代码,我将不胜感激

我不知道答案,但所有这些不安全的可变项都是对Swift到底有多远的真实评论。我想知道在Objective-C或Objective-C++中实现这一点,并创建到Swift的桥梁,而不是所有这些强制转换和不安全指针的东西,是否会容易得多。没有标准的方法来编码AES加密数据。要与其他平台兼容,您必须确保所做的每个选择都是相同的。除非您了解上面的代码在做什么(而且它非常不安全,所以我假设您不了解),否则它是非常具有挑战性的。如果您不想匹配现有的实现,那么我建议使用预构建的解决方案,如RNCryptor()。请参见RNCryptor for Swift、JNCryptor for Android和RNCryptor php for php。@DavidHoelzer上面的一些转换是必需的,因为CommonCrypto在将库连接到Swift的过程中被忽略了,但实际上已经不再需要了,而且其中一些从未需要过。此代码是由可能使用早期版本Swift(在NSString/String Bridgeting之前)的人剪切粘贴而成,显然对Optionals的理解有限。与其找出代码的错误,我建议在其分支上使用Swift版本,因为在AES256(和)中正确加密并非易事.谢谢@RobNapier。很高兴知道。我不知道答案,但所有这些不安全的可变项都是对Swift到底有多远的真实评论。我想知道在Objective-C或Objective-C++中实现这一点,并创建到Swift的桥梁,而不是所有这些强制转换和不安全指针的东西,是否会容易得多。没有标准的方法来编码AES加密数据。要与其他平台兼容,您必须确保所做的每个选择都是相同的。除非您了解上面的代码在做什么(而且它非常不安全,所以我假设您不了解),否则它是非常具有挑战性的。如果您不想匹配现有的实现,那么我建议使用预构建的解决方案,如RNCryptor()。请参见RNCryptor for Swift、JNCryptor for Android和RNCryptor php for php。@DavidHoelzer上面的一些转换是必需的,因为CommonCrypto在将库连接到Swift的过程中被忽略了,但实际上已经不再需要了,而且其中一些从未需要过。此代码是由可能使用早期版本Swift(在NSString/String Bridgeting之前)的人剪切粘贴而成,显然对Optionals的理解有限。与其找出代码的错误,我建议在其分支上使用Swift版本,因为在AES256(和)中正确加密并非易事.谢谢@RobNapier。很高兴知道。