問題完美的工作是在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 –