기기의 데이터를 암호화하여 http로 Google 웹 서버에 전송 한 다음 .net 웹 앱의 데이터를 해독했습니다. 이것이 가능한가? 그렇다면 어떤 암호화 방법을 사용해야합니까? 그리고 거기에 어떤 기사라도 있다면?iphone에서 데이터를 암호화하고 .net 웹 응용 프로그램에서 dencrypt를 사용합니다.
감사
기기의 데이터를 암호화하여 http로 Google 웹 서버에 전송 한 다음 .net 웹 앱의 데이터를 해독했습니다. 이것이 가능한가? 그렇다면 어떤 암호화 방법을 사용해야합니까? 그리고 거기에 어떤 기사라도 있다면?iphone에서 데이터를 암호화하고 .net 웹 응용 프로그램에서 dencrypt를 사용합니다.
감사
SSL을 사용하고 싶지 않으므로 (그렇게하지 않는 데는 많은 이유가 있습니다.) 기본 제공되는 CommonCrypto 프레임 워크를 사용하여 필요한 데이터 만 암호화 할 수 있습니다. 이것은 또한 당신이 원하는하지 않을 수 있습니다 ECB Mode 켜지는지
@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
참고 : 여기에 임의의 데이터를 암호화하는 간단한있는 NSData 카테고리입니다. 또한이 호출에서 되돌아 오는 데이터는 기본 64 인코딩해야하는 URL에서 사용하기에 적합하지 않습니다.
SSL은 HTTP 암호화를위한 표준 솔루션이 될 것이다. NSURLConnection
은 즉시 (즉, https : // 요청을로드) 상자를 지원하므로 적절하게 서버를 설정해야합니다.
SSL은 좋은 솔루션이지만 Rackspace 클라우드 서버가 있으며 가격은 SSL을 $ 20/월에 높이기 위해 높습니다. 앱에서 사용자 이름과 이메일 주소 만 전송합니다. 그 외 다른 암호화 방법은 표준 SSL입니다 – iosdevnyc
SSL이 옵션이 아닌 경우 CBC 모드에서 AES 암호화를 사용하십시오. 128 개의 암호화 비트가 필요한 것 뿐이며 IV는 무엇이든 사용할 수 있습니다 (0은 허용됩니다).
데이터의 보안 요구 사항을 모르는 상태에서 알려진 정적 IV가 적절한 키 길이인지 어떻게 결정할 수 있습니까? 정적 IV를 사용하면 소금이 없기 때문에 몇 가지 유형의 간접 공격을받을 수 있습니다. 랜덤 IV를 생성하고 전송하는 것은 쉬운 일이 아니므로 영향을 이해하지 않고 제거하면 안됩니다. –
EBC가 아닌 CBC 노드를 사용하십시오. 사용자가 입력 한 암호를 사용하지 마십시오. 최소한 HMAC를 통해 암호를 실행하십시오. AES 블록 크기의 배수로 데이터 채우기를 조심하십시오. – zaph
모두 true입니다. 이 코드는 많이 개선 될 수 있습니다. 간단한 API 키 암호화의 경우에는 문제가 없습니다. –