Objective c uint8_t[]数组到NSString的转换已获取(null)

Objective c uint8_t[]数组到NSString的转换已获取(null),objective-c,nsstring,nsdate,uint8t,Objective C,Nsstring,Nsdate,Uint8t,我不知道为什么(char*)uint8\u t数组到NSString的转换不起作用。 ivString始终为(空) cipherData NSData*0x1edaf3a0 16字节 密码字符串NSString*0x00000000 初始化向量uint8\u t[16] ivString NSString*0x00000000 密钥NSString*0x000d28c4@“1234567890123456” 纯NSData*0x1ed80760 9字节 p.S. NSString* ivStri

我不知道为什么(char*)uint8\u t数组到NSString的转换不起作用。 ivString始终为(空)

cipherData NSData*0x1edaf3a0 16字节

密码字符串NSString*0x00000000

初始化向量uint8\u t[16]

ivString NSString*0x00000000

密钥NSString*0x000d28c4@“1234567890123456”

纯NSData*0x1ed80760 9字节

p.S.

NSString* ivString =  [[NSString alloc] initWithBytes:initialisationVector
                                               length:16
                                             encoding:NSUTF8StringEncoding];
这也行不通。仍然得到(空)

我调用的方法是:

- (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv
{
    char keyPtr[kCCKeySizeAES128 + 1];
    memset(keyPtr, 0, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    char ivPtr[kCCBlockSizeAES128 + 1];
    memset(ivPtr, 0, sizeof(ivPtr));

    [iv getCString:ivPtr
         maxLength:sizeof(ivPtr)
          encoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [self length];
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);

    size_t numBytesCrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(operation,
                                          kCCAlgorithmAES128,
                                          kCCOptionPKCS7Padding,
                                          keyPtr,
                                          kCCBlockSizeAES128,
                                          ivPtr,
                                          [self bytes],
                                          dataLength,
                                          buffer,
                                          bufferSize,
                                          &numBytesCrypted);
    if (cryptStatus == kCCSuccess) {
        return [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
    }
    free(buffer);
    return nil;
}

- (NSData *)AES128EncryptWithKey:(NSString *)key iv:(NSString *)iv
{
    return [self AES128Operation:kCCEncrypt key:key iv:iv];
}

最后,我得到了答案
我只需要将uint8\u t[]数组视为char[]数组。然后,通过下一行将char[]数组转换为NSString:

NSString* ivString = [NSString stringWithCString:initialisationVector encoding:NSASCIIStringEncoding];
结果是:
ivString NSString*0x1d8489c0@“U”hÌTÌTÌTÌÌTÍ

cipherData
InitializationVector
不表示字符串。它们是字节数组。为什么要将其转换为字符串?我需要在屏幕上显示加密结果。但是,这不是我的问题。我的问题是我无法将初始化向量uint8\u t[]转换为NSString。因为我使用必需的NSString作为IV.ivString==(null)的格式的lib是我的问题。但是
initialisationVector
是一个随机字节序列。这些字节不表示UTF-8编码(或任何其他编码)字符串。这
AES128EncryptWithKey:iv:
方法来自哪里?iv是随机字节。你是对的。但是,我需要作为参数输入到方法中。参数formate是NSString。因此,我需要将字节数组转换为NSString。我知道IV需要一个随机字符串,但不能从随机字节创建
NSString
。我觉得奇怪的是,这个方法使用
NSString
作为
iv
参数。我建议您更新该方法,以采用
uint8\u t
数组,而不是
NSString
。然后,您可以直接传入随机字节,避免与
NSString
进行不必要的转换。
NSString* ivString = [NSString stringWithCString:initialisationVector encoding:NSASCIIStringEncoding];