在.net Web应用程序上加密iphone和dencrypt上的数据

时间:2009-11-03 14:00:37

标签: iphone iphone-sdk-3.0

我要加密设备上的数据,然后通过http发送到我们的网络服务器,然后在.net网络应用程序上解密数据。这可能吗?如果是,我应该使用哪种加密方法?如果他们有任何文章吗?

由于

3 个答案:

答案 0 :(得分:2)

SSL应该是HTTP加密的标准解决方案。 NSURLConnection支持开箱即用(只需加载https://请求),因此您只需相应地设置服务器。

答案 1 :(得分:1)

由于您不想使用SSL(并且我同意有很多很好的理由不这样做),您可以使用内置的CommonCrypto框架来加密您需要的数据。这是一个简单的NSData类别,用于加密任意数据:

@implementation NSData (AES256)

- (NSData*) encryptedWithKey: (NSString *) key;
{
    // 'key' should be 32 bytes for AES256, will be null-padded otherwise
    char keyBuffer[kCCKeySizeAES128+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 = ([self length] + kCCKeySizeAES256) & ~(kCCKeySizeAES256 - 1);

    // NSMutableData* returnBuffer = [NSMutableData dataWithLength:returnLength];
    char* returnBuffer = malloc(returnLength * sizeof(uint8_t) );

    CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES128 , kCCOptionPKCS7Padding | kCCOptionECBMode,
                                     keyBuffer, kCCKeySizeAES128, nil,
                                     [self bytes], [self length], 
                                     returnBuffer, returnLength,
                                     &numBytesEncrypted);

    if(result == kCCSuccess)
        return [NSData dataWithBytes:returnBuffer length:numBytesEncrypted];
    else 
        return nil;

}

@end

请注意,这也会打开您可能不想要的ECB Mode。还要记住,从此调用返回的数据不适合用于必须基于64编码的URL。

答案 2 :(得分:0)

如果SSL不是选项,请在CBC模式下使用AES加密。 128加密位就是你所需要的,你可以使用任何东西(0是可以接受的)作为IV。