我的代码:
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 $):)¥= ??wÞ¢#4 +'MO,œÝÕ'#2< xÕ??™'HþaÂf| šU; f£Æ¤VØ'ÿ÷påcx¨¢ÔÔ)Õ#kË«:çÑ5 õ°7 \Û?? z~“9GX>M¼êe뿆w¥ro>gP4s2μ)9; P
但是如何获取NSString格式?我的代码中有错误的步骤吗?
答案 0 :(得分:0)
始终pad your plain text。 PKCS #1是RSA加密的标准填充。
另外,请注意,使用RSA公钥加密,您只能加密/解密密钥大小(减去几个开销字节)。
公钥加密通常仅用于加密密钥(和散列),然后用于实际有效负载的对称加密(和验证)。