问题完美的工作是在IOS随机生成的PHP IV未在IOS
解码的情况是我使用Blowfish算法CBC模式时的基64编码的四(在PHP)不匹配。简单的服务器(PHP)生成一个随机加密IV 和编码的base64格式,发送到IOS。 问题在这里,当我尝试解码时,解码结果总是不正确。有时它会产生正确的和剩余的时间错误。
这是我的PHP代码。
public function ivGenerator()
{
$ivSize = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($ivSize, MCRYPT_RAND);
echo base64_encode($iv);
}
下面是两个结果集ivGenerator的,我将在以后使用解码
bTpkpLxMbNo=
aIvJeujxW7w=
这里是我的IOS代码。
NSString *ecodedIVString = @"bTpkpLxMbNo=";
NSData *ecodedIVData= [[NSData alloc] initWithBase64EncodedString:ecodedIVString options:0];
NSString *decodeIVString = [[NSString alloc] initWithData:ecodedIVData encoding:NSASCIIStringEncoding];
NSLog(@"decodeIVString %@" , decodeIVString); // m:d¤¼LlÚ //its correct
如果使用,
NSString *ecodedIVString = @"aIvJeujxW7w=";
那么结果是hÉzèñ[¼,但实际的结果应该是ħ<Ézèñ[¼
我试图
NSWindowsCP1252StringEncoding , NSISOLatin1StringEncoding , NSUTF8StringEncoding
但是他们都无法产生准确的结果(约。 10次测试我找到了)。
在此先感谢!
不要使用'MCRYPT_RAND' - 它没有任何随机性,它不是密码安全的。改为使用'MCRYPT_DEV_URANDOM'。 – Narf
你尝试过'NSUTF32StringEncoding'吗? –
没有工作@Albert Renshaw –