经过很长一段时间寻找在PHP和iOS之间加密/解密数据的最佳方法,我现在要求你在PHP中使用函数。
我在Objective-C中使用此框架(https://gist.github.com/2507415),我的代码是:
NSString *string= @"Affe";
NSString *key = @"12345678901234567890123456789012";
NSLog(%@,[string AES256EnryptWithKey:key];
输出: UUfn34iyNlSK40VaehloaQ ==
我在PHP中尝试过这么多,但没有任何效果。我希望有人知道如何解密这个服务器端。
答案 0 :(得分:2)
我对IOS知之甚少,但我最近在PHP和Java API之间实现了相同的逻辑。 我需要加密android设备和PHP后端之间的通信。
我写了一个小摘要,也许PHP部分可能会帮助你。
http://blog.cwill-dev.com/2012/10/09/encryption-between-javaandroid-and-php/
你应该看看路易斯已经提到的mcrypt library。
答案 1 :(得分:0)
似乎PHP不支持AES 256,http://www.php.net/manual/en/function.hash-algos.php。
我发现使用Rijndael-256的实现,但我不确定它是否正常工作:
http://kix.in/2008/07/22/aes-256-using-php-mcrypt/
http://snipperize.todayclose.com/snippet/php/Encrypt-and-Decrypt-AES-256--17234/
答案 2 :(得分:0)
这似乎是使用AES 128,在ECB模式下没有IV和PKCS-7兼容填充,请尝试this:
function encrypt($str, $key)
{
$block = mcrypt_get_block_size('rijndael-128', 'ecb');
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
return base64_encode(mcrypt_encrypt('rijndael-128', $key, $str, 'ecb'));
}
function decrypt($str, $key)
{
$str = mcrypt_decrypt('rijndael-128', $key, base64_decode($str), 'ecb');
$block = mcrypt_get_block_size('rijndael-128', 'ecb');
$pad = ord($str[($len = strlen($str)) - 1]);
return substr($str, 0, strlen($str) - $pad);
}
PS:我已经忘记了base64编码,现在已经修复了。