问题描述
示例:j'aime trop ma série
我正在使用 Commoncypto 来加密字符串。当字符串包含纯文本时它起作用。但是,当字符串如上例所示时,它不起作用。
我正在使用以下代码:
+ (Nsstring *) EncryptString:(Nsstring *)plainSourceStringToEncrypt {
StringEncryption *crypto = [[StringEncryption alloc] init];
NSData *_secretData = [plainSourceStringToEncrypt dataUsingEncoding:NSASCIIStringEncoding];
NSData *encryptedData = [crypto encrypt:_secretData key:[_key dataUsingEncoding:NSUTF8StringEncoding] padding:&padding];
return [encryptedData base64EncodingWithLineLength:0]; }
- (NSData *)encrypt:(NSData *)plainText key:(NSData *)asymmetricKey padding:(Ccoptions *)pkcs7 {
return [self doCipher:plainText key:asymmetricKey context:kCCEncrypt padding:pkcs7]; }
- (NSData *)doCipher:(NSData *)plainText key:(NSData *)asymmetricKey
context:(Ccoperation)encryptOrDecrypt padding:(Ccoptions *)pkcs7 {
CCCryptorStatus ccStatus = kCCSuccess;
// Symmetric crypto reference.
CCCryptorRef thisEncipher = NULL;
// Cipher Text container.
NSData * cipherOrPlainText = nil;
// Pointer to output buffer.
uint8_t * bufferPtr = NULL;
// Total size of the buffer.
size_t bufferPtrSize = 0;
// Remaining bytes to be performed on.
size_t remainingBytes = 0;
// Number of bytes moved to buffer.
size_t movedBytes = 0;
// Length of plainText buffer.
size_t plainTextBufferSize = 0;
// Placeholder for total written.
size_t totalBytesWritten = 0;
// A friendly helper pointer.
uint8_t * ptr;
// Initialization vector; dummy in this case 0's.
uint8_t iv[kChosenCipherBlockSize];
memset((void *) iv,0x0,(size_t) sizeof(iv));
NSLog(@"doCipher: plaintext: %@",plainText);
NSLog(@"doCipher: key length: %lu",(unsigned long)[asymmetricKey length]);
plainTextBufferSize = [plainText length];
//LOGGING_FACILITY(plainTextBufferSize > 0,@"Empty plaintext passed in." );
NSLog(@"pkcs7: %d",*pkcs7);
// We don't want to toss padding on if we don't need to
if(encryptOrDecrypt == kCCEncrypt) {
if(*pkcs7 != kCcoptionECBMode) {
if((plainTextBufferSize % kChosenCipherBlockSize) == 0) {
*pkcs7 = 0x0000;
} else {
*pkcs7 = kCcoptionPKCS7Padding;
}
}
} else if(encryptOrDecrypt != kCCDecrypt) {
NSLog(@"Invalid Ccoperation parameter [%d] for cipher context.",*pkcs7 );
}
// Create and Initialize the crypto reference.
ccStatus = CCCryptorCreate(encryptOrDecrypt,kCCAlgorithmAES128,*pkcs7,(const void *)[asymmetricKey bytes],kChosenCipherKeySize,(const void *)iv,&thisEncipher
);
// Calculate byte block alignment for all calls through to and including final.
bufferPtrSize = CCCryptorGetoutputLength(thisEncipher,plainTextBufferSize,true);
// Allocate buffer.
bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t) );
// Zero out buffer.
memset((void *)bufferPtr,bufferPtrSize);
// Initialize some necessary book keeping.
ptr = bufferPtr;
// Set up initial size.
remainingBytes = bufferPtrSize;
// Actually perform the encryption or decryption.
ccStatus = CCCryptorUpdate(thisEncipher,(const void *) [plainText bytes],ptr,remainingBytes,&movedBytes
);
// Handle book keeping.
ptr += movedBytes;
remainingBytes -= movedBytes;
totalBytesWritten += movedBytes;
// Finalize everything to the output buffer.
ccStatus = CCCryptorFinal(thisEncipher,&movedBytes
);
totalBytesWritten += movedBytes;
if(thisEncipher) {
(void) CCCryptorRelease(thisEncipher);
thisEncipher = NULL;
}
if (ccStatus == kCCSuccess)
cipherOrPlainText = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)totalBytesWritten];
else
cipherOrPlainText = nil;
if(bufferPtr) free(bufferPtr);
return cipherOrPlainText; }
+ (Nsstring *) EncryptString:(Nsstring *)plainSourceStringToEncrypt
我如何使用 CommonCrypto 加密上面的示例字符串?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)