【发布时间】:2015-02-05 16:58:07
【问题描述】:
我一直在尝试使用RNCryptor 加密 iOS 中的字符串,并让应用程序将加密的字符串发布到服务器,该服务器将解密 PHP 中的字符串。
在 PHP 脚本返回空字符串之前,一切似乎都运行良好(没有错误消息)。
我认为问题出在 iOS 代码中,因为当我尝试解密示例 decrypt.php 中的字符串时,它工作正常。
iOS:
NSString *key = @"myPassword";
NSString *string = @"Secret String";
NSData *plain = [string dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipherData = [RNEncryptor encryptData:plain withSettings:kRNCryptorAES256Settings password:key error:&error];
NSString *cipherString = [[NSString alloc] initWithData:[cipherData base64EncodedDataWithOptions:0] encoding:NSUTF8StringEncoding];
然后我将 cipherString 发布到以下 PHP 脚本
PHP:
require 'autoload.php';
$password = "myPassword";
$base64Encrypted = $_POST['data'];
$cryptor = new \RNCryptor\Decryptor();
$plaintext = $cryptor->decrypt($base64Encrypted, $password);
echo $plaintext;
感谢所有帮助。谢谢。
编辑:我从this discussion 了解到,当我从cipherString 直接进入PHP 的Base64 时,没有POST,它工作得很好。有什么想法吗?
【问题讨论】:
-
PHP 有非标准的填充,它不是 PKCS#7。
-
将最后一条语句分成两部分,这样您就可以知道是加密还是 Base5 编码失败了。
-
@Zaph RNCryptor != mcrypt,因此 PKCS#7 注释可能不适用。注意RNCrypt有多个版本,请确保版本匹配!
-
我发现如果我将
cipherString中的数据输入到PHP 脚本中(不使用POST),它可以正常工作,这是什么意思?
标签: php ios encryption aes rncryptor