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