【问题标题】:RNCryptor Encrypt in iOS and Decrypt in PHPRNCryptor 在 iOS 中加密和在 PHP 中解密
【发布时间】: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


【解决方案1】:

替换

$cryptor = new \RNCryptor\Decryptor();

通过

$cryptor = new \RNCryptor\RNCryptor\Decryptor;

【讨论】:

    猜你喜欢
    • 2012-11-18
    • 2015-01-10
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2013-02-12
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多