2013-05-31 152 views
0

我的代码:加密使用公钥

SecKeyRef oPublicKey = [self getPublicKeyRef]; 
SecKeyRef oPrivateKey = [self getPrivateKeyRef]; 

CFDictionaryRef myDictionary; 

CFTypeRef keys[2]; 
CFTypeRef values[2]; 

// Initialize dictionary of key params 
keys[0] = kSecAttrKeyType; 
values[0] = kSecAttrKeyTypeRSA; 
keys[1] = kSecAttrKeySizeInBits; 
int iByteSize = 1024; 
values[1] = CFNumberCreate(NULL, kCFNumberIntType, &iByteSize); 
myDictionary = CFDictionaryCreate(NULL, keys, values, sizeof(keys)/sizeof(keys[0]), NULL, NULL); 

// Generate keys 
OSStatus status = SecKeyGeneratePair(myDictionary, &oPublicKey, &oPrivateKey); 
if (status != 0) 
    NSLog(@"SecKeyGeneratePair failed"); 

// Encrypt some data 
uint8_t* pPlainText = (uint8_t*)"6921"; 

uint8_t aCipherText[1024]; 
size_t iCipherLength = 1024; 
status = SecKeyEncrypt(oPublicKey, kSecPaddingPKCS1, pPlainText, strlen((char*)pPlainText) + 1, &aCipherText[0], &iCipherLength); 

if (status != 0) 
    NSLog(@"SecKeyEncrypt failed"); 

NSMutableData *data12=[[NSMutableData alloc] init]; 
[data12 appendBytes:aCipherText length:strlen((char*)aCipherText) + 1]; 
NSString *string1 = [[NSString alloc]initWithData:data12 encoding:NSASCIIStringEncoding]; 
NSLog(@"Encrypted Text:::%@",string1); 

// Decrypt the data 
uint8_t aPlainText[1024]; 
size_t iPlainLength = 1024; 
status = SecKeyDecrypt(oPrivateKey, kSecPaddingPKCS1, &aCipherText[0], iCipherLength, &aPlainText[0], &iPlainLength); 
if (status != 0) 
    NSLog(@"SecKeyDecrypt failed"); 

NSLog(@"FINAL decrypted text: %s", aPlainText); 

我使用加密的代码,但我们越来越像输出:

N $):)¥= 问心无愧¢#4 + ’ MO,œ YO ‘ #2 < XO  ™ ‘ HTH A A f| š U;˚F£AEIø¤VØ'ÿ÷¨PACX¢O)O-#k中Ë«: 012 012 7 \  ‰ z〜“ 9GX>M¼ê뿆 w¥ro¬›gP4s2μ)9; p

但是如何获得NSString格式?我的代码中有没有错误的步骤?

回答

0

总是pad your plain textPKCS #1是RSA加密的标准填充。

另外,请注意,使用RSA公钥加密,您只能加密/解密数据,最多可达密钥的大小(减少几个开销字节)。

公钥加密通常只用于加密密钥(和散列),然后用于实际有效负载的对称加密(和验证)。