我想在將數據發送到服務器之前使用我的數據進行加密,是否有任何高度安全的雙向加密算法?哪一個最適合這個目的。什麼是IOS中可用的最佳數據加密算法
回答
公鑰基礎設施(PKI)爲您提供了一種值得信賴的方式來加密2臺機器之間的數據。你可以試試看。
您可以使用HTTPS,或者也可以使用RC6來加密您的數據。
下面是使用3DES CCCrypt方法,從googlecode上查找GTMBase64.h我的代碼,https://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/GTMBase64.h?r=87
#import <CommonCrypto/CommonCryptor.h>
#import "GTMBase64.h"
- (NSData*)TripleDES:(NSData*)plainData encryptOrDecrypt:(CCOperation)encryptOrDecrypt key:(NSString*)key {
const void *vplainText;
size_t plainTextBufferSize;
if (encryptOrDecrypt == kCCDecrypt)
{
NSData *EncryptData = [GTMBase64 decodeData:plainData];
plainTextBufferSize = [EncryptData length];
vplainText = [EncryptData bytes];
}
else
{
plainTextBufferSize = [plainData length];
vplainText = (const void *)[plainData bytes];
}
CCCryptorStatus ccStatus;
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
// uint8_t ivkCCBlockSize3DES;
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 = @"123456789";
NSString *initVec = @"init Vec";
const void *vkey = (const void *) [key UTF8String];
const void *vinitVec = (const void *) [initVec UTF8String];
ccStatus = CCCrypt(encryptOrDecrypt,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding,
vkey, //"123456789", //key
kCCKeySize3DES,
vinitVec, //"init Vec", //iv,
vplainText, //"Your Name", //plainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
//if (ccStatus == kCCSuccess) NSLog(@"SUCCESS");
/*else if (ccStatus == kCC ParamError) 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"; */
NSData *result;
if (encryptOrDecrypt == kCCDecrypt)
{
result = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
}
else
{
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result = [GTMBase64 encodeData:myData];
}
return result;
}
使用
NSString *inputString = @"good";
//encode
NSData *inputData = [inputString dataUsingEncoding:NSUTF8StringEncoding];
NSData *encriptdata = [self TripleDES:inputData encryptOrDecrypt:kCCEncrypt key:@"ff68f8e82961489a8b14b345"];
NSString *encodeString = [GTMBase64 stringByEncodingData:encriptdata];
NSLog(@"encodeString : %@" ,encodeString);
//decode
NSData *encodeData = [GTMBase64 decodeString:encodeString];
NSData *decodeData = [self TripleDES:encodeData encryptOrDecrypt:kCCDecrypt key:@"ff68f8e82961489a8b14b345"];
NSString *decodeString = [[NSString alloc] initWithBytes:[decodeData bytes] length:[decodeData length] encoding:NSUTF8StringEncoding];
NSLog(@"decodeString : %@" ,decodeString);
這是不工作時我想解密加密的數據。 – 2012-02-29 13:47:50
user731077,如果你想解密,NSData * outData = [NSString TripleDES:data encryptOrDecrypt:kCCDecrypt key:@「f968f8e82961489a8b14b345」];發佈你已經加密的數據和你的密鑰的功能。你會得到結果,但我已經測試過了。 – carl 2012-02-29 14:38:11
當我使用[NSString TripleDES:dataToEncode encryptOrDecrypt:kCCEncrypt key:@「f968f8e82961489a8b14b345」]它給,+ [NSString TripleDES:encryptOrDecrypt:key:]:無法識別的選擇器發送到類0x88ffd8 – 2012-03-01 08:11:28
檢查的部份一旦
在這裏,關鍵是字符串變量,聲明爲全局變量。
爲您的代碼附加sequrity框架和進口
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>
- (void)viewDidLoad
{
[super viewDidLoad];
[email protected]"Your own key";
// encoding
NSString *encodingString=[[self encrypt:[@"Your String"
dataUsingEncoding:NSUTF8StringEncoding]
base64EncodedString];;
//decoding
NSData *data=[self decrypt:[NSData dataFromBase64String:encryptString]];
NSString *decodingString = [[NSString alloc] initWithBytes:[data bytes] length:
[data length] encoding: NSASCIIStringEncoding];
}
- (NSData *) encrypt:(NSData *) plainText {
return [self transform:kCCEncrypt data:plainText];
}
- (NSData *) decrypt:(NSData *) cipherText {
return [self transform:kCCDecrypt data:cipherText];
}
- (NSData *) transform:(CCOperation) encryptOrDecrypt data:(NSData *) inputData {
// kCCKeySizeAES128 = 16 bytes
// CC_MD5_DIGEST_LENGTH = 16 bytes
NSData* secretKey = [ChipperObject md5:Key];
CCCryptorRef cryptor = NULL;
CCCryptorStatus status = kCCSuccess;
uint8_t iv[kCCBlockSizeAES128];
memset((void *) iv, 0x0, (size_t) sizeof(iv));
status = CCCryptorCreate(encryptOrDecrypt,
kCCAlgorithmAES128,kCCOptionPKCS7Padding,
[secretKey bytes], kCCKeySizeAES128, iv, &cryptor);
if (status != kCCSuccess) {
return nil;
}
size_t bufsize = CCCryptorGetOutputLength(cryptor, (size_t)[inputData length],
true);
void * buf = malloc(bufsize * sizeof(uint8_t));
memset(buf, 0x0, bufsize);
size_t bufused = 0;
size_t bytesTotal = 0;
status = CCCryptorUpdate(cryptor, [inputData bytes], (size_t)[inputData length],
buf, bufsize, &bufused);
if (status != kCCSuccess) {
free(buf);
CCCryptorRelease(cryptor);
return nil;
}
bytesTotal += bufused;
status = CCCryptorFinal(cryptor, buf + bufused, bufsize - bufused, &bufused);
if (status != kCCSuccess) {
free(buf);
CCCryptorRelease(cryptor);
return nil;
}
bytesTotal += bufused;
CCCryptorRelease(cryptor);
return [NSData dataWithBytesNoCopy:buf length:bytesTotal];
}
此代碼複製來自http://stackoverflow.com/questions/10701590/aes-decryption-using-objectivec – DarkDust 2013-08-13 06:42:21
- 1. 在.NET中加密數據的最佳做法是什麼?
- 2. 在codeigniter中加密密碼的最佳方法是什麼
- 3. Android中用於短數據集的最佳加密算法
- 4. 保存加密/解密密鑰的最佳方法是什麼?
- 5. 加密密碼的最佳算法
- 6. 什麼是最新的密碼哈希算法/數據加密爲MySQL?
- 7. 在iOS中實現加密邏輯的最佳做法是什麼?
- 8. 在Java API中可用的最佳非對稱加密算法?
- 9. 增加數字的最佳壓縮算法是什麼?
- 10. 將數據保存到iOS的最佳方法是什麼?
- 11. 加密信用卡數據的最先進的算法是什麼
- 12. Dijkstra算法實現的最佳數據結構是什麼? C#
- 13. 什麼是數據轉儲的最佳壓縮算法
- 14. 在MySQL中使用/存儲加密密鑰的最佳方法是什麼
- 15. 在應用程序中加密數據的最佳方式是什麼
- 16. HMAC解決方案中密鑰的使用(最佳/最佳做法)是什麼?
- 17. MariaDB加密的最佳做法是什麼?
- 18. 哪個加密算法在NSDataWritingFileProtection中使用iOS,密鑰大小是什麼?
- 19. 追加AJAX數據的最佳方法是什麼?
- 20. 解密加密數據庫時保留解密密鑰的最佳方法是什麼?
- 21. 什麼是使用c#加密和解密值的最佳方法?
- 22. 什麼是加密/解密密鑰管理最佳實踐
- 23. 在Laravel 5.1中加密然後解密的最佳方法是什麼?
- 24. 在web2py中加密存儲數據的最佳方式是什麼?
- 25. Javascript - 使用密碼加密數據的最佳方法
- 26. 什麼是存儲AES加密密鑰的最佳方式?
- 27. 什麼是存儲加密密鑰的最佳方式?
- 28. 在iOS中存儲/加載本地數據的最佳方式是什麼?
- 29. 什麼是asp.net項目中的dll文件的最佳加密?
- 30. 在C#中使用可空SQL數據的最佳做法是什麼?
退房[此鏈接](http://stackoverflow.com/a/5564822/468724) – 2012-02-28 08:21:21