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