2

私はPHPで値を暗号化しており、別のプログラマーがiPhoneアプリで値を復号化しています。私たちのどちらも、暗号化に精通しているとは言えません。このサイトや他の場所で見つけた情報から、すべてが正しいように見えます。iPhoneの男は、復号化プロセスから成功のリターンコードを取得したが、データの値がnullであると言っています。

PHP側は次のとおりです。

$key = getproperty("cryptkey","testkeytobechanged");
srand();
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
if (strlen($iv_base64 = rtrim(base64_encode($iv), '=')) != 22) return false;
$encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, md5($key), $iv_base64."::::".$authority->get_mobiuser()->get_message(), MCRYPT_MODE_CBC, $iv));
$rv = $iv_base64.$encrypted;

これはiPhone側にあるものです:

   //We have compared the hex values after base64 decoding enough that I am satisfied there is not an issue at that point.

   NSString *b = [[dict objectForKey:@"data"]objectForKey:@"nlbal"];
   NSData *iv = [NSData dataFromBase64String:[[b substringToIndex:22]stringByAppendingString:@"=="]];
   NSLog(@"IV %@", [iv description]);
   NSString *e = [b substringFromIndex:22];
   NSData *encrypted = [NSData dataFromBase64String:e];
   NSLog(@"ENC %@", encrypted);
   NSUInteger dataLength = [encrypted length];
   uint8_t unencryptedData[dataLength + kCCKeySizeAES128];
   size_t unencryptedLength;
   //NSData *un = [encrypted AES128DecryptWithKey:[SessionManager md5:@"testkeytobechanged"] iv:iv];



   //From my research, I understand this to be the correct form to match the encryption I use on the PHP side
   CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, 
                                          kCCAlgorithmAES128, 0, 
                                          [[SessionManager md5:@"testkeytobechanged"]UTF8String], 
                                          kCCKeySizeAES128, [iv bytes], 
                                          [encrypted bytes], dataLength, 
                                          unencryptedData, dataLength, &unencryptedLength);

   NSString *output = [[NSString alloc] initWithBytes:unencryptedData length:unencryptedLength encoding:NSUTF8StringEncoding];
   // output = [[NSString alloc]initWithData:un encoding:NSUTF8StringEncoding];
   //NSLog(@"un %@", [un description]);
   NSLog(@"OUTPUT %i %@", cryptStatus, output);

上で述べたように、このコードは明らかに成功コードを生成しますが、null値を持っています。

4

0 に答える 0