我一直在用這一個撞牆在我的頭上。我需要編寫我的iPhone應用程序來使用ECES模式下的3DES加密一個4位數的「引腳」,以便傳輸到我認爲是用.NET編寫的web服務。iPhone 3DES加密密鑰長度問題
+ (NSData *)TripleDESEncryptWithKey:(NSString *)key dataToEncrypt:(NSData*)encryptData {
NSLog(@"kCCKeySize3DES=%d", kCCKeySize3DES);
char keyBuffer[kCCKeySize3DES+1]; // room for terminator (unused)
bzero(keyBuffer, sizeof(keyBuffer)); // fill with zeroes (for padding)
[key getCString: keyBuffer maxLength: sizeof(keyBuffer) encoding: NSUTF8StringEncoding];
// encrypts in-place, since this is a mutable data object
size_t numBytesEncrypted = 0;
size_t returnLength = ([encryptData length] + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
// NSMutableData* returnBuffer = [NSMutableData dataWithLength:returnLength];
char* returnBuffer = malloc(returnLength * sizeof(uint8_t));
CCCryptorStatus ccStatus = CCCrypt(kCCEncrypt, kCCAlgorithm3DES , kCCOptionECBMode,
keyBuffer, kCCKeySize3DES, nil,
[encryptData bytes], [encryptData length],
returnBuffer, returnLength,
&numBytesEncrypted);
if (ccStatus == kCCParamError) NSLog(@"PARAM ERROR");
else if (ccStatus == kCCBufferTooSmall) NSLog(@"BUFFER TOO SMALL");
else if (ccStatus == kCCMemoryFailure) NSLog(@"MEMORY FAILURE");
else if (ccStatus == kCCAlignmentError) NSLog(@"ALIGNMENT");
else if (ccStatus == kCCDecodeError) NSLog(@"DECODE ERROR");
else if (ccStatus == kCCUnimplemented) NSLog(@"UNIMPLEMENTED");
if(ccStatus == kCCSuccess) {
NSLog(@"TripleDESEncryptWithKey encrypted: %@", [NSData dataWithBytes:returnBuffer length:numBytesEncrypted]);
return [NSData dataWithBytes:returnBuffer length:numBytesEncrypted];
}
else
return nil;
} }
我確實使用上面的代碼獲得了一個加密的值,但它與.NET web服務的值不匹配。
我認爲問題在於Web服務開發人員提供的加密密鑰長度爲48個字符。
我看到iPhone SDK常量「kCCKeySize3DES」是24.所以我懷疑,但不知道,commoncrypto API調用只使用提供的鍵的前24個字符。
這是正確的嗎?
有沒有辦法我可以得到這個來產生正確的加密引腳?我已經將加密PRIOR中的數據字節輸出到base64編碼,並試圖將這些數據字節與.NET代碼生成的數據進行匹配(藉助向.NET發送字節數組輸出的.NET開發人員的幫助)。非base64編碼的字節數組和最終的base64編碼字符串都不匹配。
謝謝托馬斯您在這裏的詳細答案。你提到的概念正是我最終看到的更多細節。我很幸運,因爲我可以訪問.NET版本的加密代碼,這給我提供了寶貴的指導。 將4位數的PIN碼變成8位數值,並通過追加4個0來輸入3DES算法。 我將此代碼添加到此答案中,但標記爲解決方案,因爲您的知識完全正確。 – 2010-03-16 17:14:08