iPhone和服务器上的3DESencryption不同

我有以下代码来encryption我发送到我的服务器的请求。 在服务器上的解码是由.NET完成的,在iPhone上,我正在使用下面的代码安全框架。

- (NSString*) doCipher:(NSString*)plainText:(CCOperation)encryptOrDecrypt { const void *vplainText; size_t plainTextBufferSize; if (encryptOrDecrypt == kCCDecrypt) { NSData *EncryptData = [[NSData alloc] initWithBase64EncodedString:plainText]; plainTextBufferSize = [EncryptData length]; vplainText = [EncryptData bytes]; } else { plainTextBufferSize = [plainText length]; vplainText = (const void *) [plainText UTF8String]; } CCCryptorStatus ccStatus; uint8_t *bufferPtr = NULL; size_t bufferPtrSize = 0; size_t movedBytes = 0; // uint8_t iv[kCCBlockSize3DES]; uint8_t iv[kCCBlockSize3DES]; memset((void *) iv, 0x0, (size_t) sizeof(iv)); bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1); bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t)); memset((void *)bufferPtr, 0x0, bufferPtrSize); // memset((void *) iv, 0x0, (size_t) sizeof(iv)); NSString *key = @"D3v3lop_4pp13_f0r_M4z4Y4"; const void *vkey = (const void *) [key UTF8String]; ccStatus = CCCrypt(encryptOrDecrypt, kCCAlgorithm3DES, kCCOptionPKCS7Padding, vkey, //"123456789012345678901234", //key kCCKeySize3DES, iv, //"init Vec", //iv, vplainText, //"Your Name", //plainText, plainTextBufferSize, (void *)bufferPtr, bufferPtrSize, &movedBytes); if (ccStatus == kCCSuccess) NSLog(@"SUCCESS"); else if (ccStatus == kCCParamError) return @"PARAM ERROR"; else if (ccStatus == kCCBufferTooSmall) return @"BUFFER TOO SMALL"; else if (ccStatus == kCCMemoryFailure) return @"MEMORY FAILURE"; else if (ccStatus == kCCAlignmentError) return @"ALIGNMENT"; else if (ccStatus == kCCDecodeError) return @"DECODE ERROR"; else if (ccStatus == kCCUnimplemented) return @"UNIMPLEMENTED"; NSString *result; if (encryptOrDecrypt == kCCDecrypt) { result = [[ [NSString alloc] initWithData: [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes] encoding:NSASCIIStringEncoding] autorelease]; } else { NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes]; result = [myData base64Encoding]; } return result; } 

当encryptionstring小于8个字符时,服务器和iPhone上的encryption结果相同! 之后,它会给出不同的结果。 我是一个总的初学者,有什么暗示在哪里看?

是的,你的密码模式和/或填充是不同的。 确保您在服务器和客户端上都使用相同的模式。 例如,在大多数情况下,使用PKCS#7填充的CBC模式是一个不错的select。

你使用3DES有什么特别的原因吗? 它比AES慢得多(性能略差)。