문제

NSDATA + AES256 클래스 내에 다음 코드가 있습니다.다음 코드로 NSString에 AES CBC 암호화를 시도하고 있습니다.나는 키와 IV가있다.그러나 결과적으로 null을 얻는 것.무엇이 잘못되었는지 알지 못할 수 없습니다.이것은 내가 시도한 것입니다 -

NSString *initV= @"somekey*********";
NSData *input= [initV dataUsingEncoding:NSUTF8StringEncoding];


size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCModeCBC,
                                      keyPtr, kCCKeySizeAES256,
                                      [input bytes] /* initialization vector (optional) */,
                                      [self bytes], dataLength, /* input */
                                      buffer, bufferSize, /* output */
                                      &numBytesEncrypted);
.

도움이 되었습니까?

해결책

이것은 마침내 나를 위해 일한 코드입니다 -

-(NSData *)AES256EncryptWithKey:(NSString *)key {
NSUInteger dataLength = [self length];
NSData *keyGiven= [key dataUsingEncoding:NSUTF8StringEncoding];    

size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);

NSString *initV= @"***************";
NSData *input= [initV dataUsingEncoding:NSUTF8StringEncoding];

size_t numBytesEncrypted = 0;

CCCryptorRef ccRef;
CCCryptorCreate(kCCEncrypt, kCCAlgorithmAES128, 0, (const void *)[keyGiven bytes], kCCKeySizeAES256, (const void *)[input bytes], &ccRef);
CCCryptorStatus cryptStatus = CCCryptorUpdate(ccRef, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted);
CCCryptorRelease(ccRef);

if (cryptStatus == kCCSuccess) {
    return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer); //free the buffer;
return nil;
}
.

NSString을 NSData로 변환하고 암호화를 위해 전달합니다.nsstring은 16 자 여야합니다.그것이 16 자 미만이면 공백을 추가하여 16을 만듭니다.

이것이 아무도 돕기 위해 이것이 도움이 될지 모르겠습니다.그러나 나는 방금 나누어야한다고 생각했습니다.고마워.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top