2011-07-10 48 views
0

我想寫的,將在PHP服務器進行解密iPhone應用程序加密功能上解密,iPhone加密功能,將PHP服務器

在PHP

解密功能是本

function decrypt($input_text) 
{ 
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 
    $enc_key = "0e9d083f3514a69243bb8f1395d332c1"; 
    $out = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $enc_key, $input_text, MCRYPT_MODE_ECB, $iv); 
    return $out; 

} 

我m使用iPhone中的以下加密代碼:

+(NSString*) encrypt:(NSString*) str key:(NSString*) key 
{ 
    NSString *key =key; 
    char keyPtr[kCCKeySizeAES256+1]; // room for terminator (unused) 
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding) 

     // fetch key data 
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 
    char *dataIn = [str UTF8String]; 
    char dataOut[500];// set it acc ur data 
    bzero(dataOut, sizeof(dataOut)); 
    size_t numBytesEncrypted = 0; 
    CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding|kCCOptionECBMode, keyPtr,kCCKeySizeAES128, NULL, dataIn, strlen(dataIn), dataOut, sizeof(dataOut), &numBytesEncrypted); 

    NSString* strResult = [[[NSString alloc] initWithCString:dataOut] autorelease]; 
    return [strResult copy]; 
} 

但是沒有得到原始結果。 請有人可以糾正我在哪裏我錯了

回答

0

您正在使用AES與256位密鑰在解密和128位密鑰在加密。這些是完全不同的算法。

1

嘗試:

  • 至於說,使用這兩種情況下相同的密鑰長度。
  • 在CCCrypt調用中,不存儲生成的iv,而是傳遞NULL。你應該存儲這個,並以某種方式將它沿着消息傳輸到你的PHP代碼。在那裏,而不是生成一個新的,隨機的iv你會重用由iPhone生成的現有。
  • 最重要的是,mcrypt不支持PKCS7Padding(通常也稱爲PKCS5Padding),所以很遺憾,您自己需要implement。就你而言,你首先解密iPhone的輸入,然後應用該文章中描述的pkcs5_unpad函數。
+0

令人敬畏的評論,你應該已經發布了一個答案! – emboss

+0

將與您的許可,thx! – emboss