Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用aes模式在swift中加密字符串?_Php_Ios_Swift - Fatal编程技术网

Php 如何使用aes模式在swift中加密字符串?

Php 如何使用aes模式在swift中加密字符串?,php,ios,swift,Php,Ios,Swift,我在网上搜索了很多文章,只找到了 [ ]然而,在Stackoverflow上,当我复制本文中的代码时,编译器返回一个与我从在线加密工具获得的不同的加密结果 有人能帮我吗? 谢谢 另外,我真的看不懂obj-c。刚刚从javascript和PHP转到swift =============编辑=========== 现在,我使用swift 1.2将方法更改为AES。代码如下所示(iv和钥匙在测试时保持静止): 您没有将加密数据的长度设置为引用返回的值:numBytesEncrypted。在本例中:bu

我在网上搜索了很多文章,只找到了 [ ]然而,在Stackoverflow上,当我复制本文中的代码时,编译器返回一个与我从在线加密工具获得的不同的加密结果

有人能帮我吗?
谢谢

另外,我真的看不懂obj-c。刚刚从
javascript
PHP
转到swift

=============编辑===========

现在,我使用swift 1.2将方法更改为AES。代码如下所示(iv和钥匙在测试时保持静止):

  • 您没有将加密数据的长度设置为引用返回的值:
    numBytesEncrypted
    。在本例中:
    bufferData.length=numBytesEncrypted

  • MCRYPT_RIJNDAEL_256指定256位的块大小,AES仅使用128位的块大小,将MCRYPT中的更改为MCRYPT_RIJNDAEL_128。注意:块大小与键大小不同

  • iv大小是块大小(128位/16字节)

  • 显示示例输入和输出数据以获取更多帮助


  • 对于Swift示例,请注意,DES和3DES不应用于新工作,仅用于与现有遗留实现的兼容性。目前的标准是AES。此外,ECB模式是一个非常糟糕的选择,它缺乏CBC模式的安全性。感谢Zaph,但是现在当我将加密方法更改为AES256并填充PKCS7时,结果与我从PHP服务器获得的结果不同。我在上面粘贴了我的代码,我应该如何解决这个问题?太棒了。谢谢你,扎夫。再次感谢你的快速回复。我应该如何设置numBytesEncrypted?许多在线文档表示,在加密之前,numBytesEncrypted的大小类型应设置为零。
        let key:String = "12345678901234567890123456789012"
        let iv:String =  "12345678901234567890123456789012"
    
        let keyData: NSData! = (key as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
        let keyBytes         = UnsafePointer<UInt8>(keyData.bytes)
        let keyLength        = size_t(kCCKeySizeAES256)
    
        let plainData: NSData! = (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:   CCOptions = UInt32(kCCOptionPKCS7Padding)
    
        let ivData: NSData! = (iv as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!
        let ivPointer = UnsafePointer<UInt8>(ivData.bytes)
    
        var numBytesEncrypted: size_t = 0
    
        var cryptStatus = CCCrypt(operation, algoritm, options, keyBytes, keyLength, ivPointer, dataBytes, dataLength, bufferPointer, bufferLength, &numBytesEncrypted)
    
        function addPkcs7Padding($string) {
            $cipher = MCRYPT_RIJNDAEL_256;
            $mode = MCRYPT_MODE_CBC;
            $blocksize = mcrypt_get_iv_size($cipher, $mode);
            $len = strlen($string);
            $pad = $blocksize - ($len % $blocksize);
            $string .= str_repeat(chr($pad), $pad);
            return $string;
        }
    
        function aes256cbcEncrypt($str, $iv, $key ) {
            return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, addPkcs7Padding($str) , MCRYPT_MODE_CBC, $iv));
        }