将uint8_t转换为NSData
我已根据Apple开发人员网站上提供的示例在IOS应用程序中实施了publickey privatekey RSA加密。将uint8_t转换为NSData
如果我加密并返回uint8_t cipherBuffer,然后从uint8_t cipherBuffer解密,它就可以完美工作。不过,我需要将加密数据作为NSData存储到xcdata模型中。
我遇到的问题是可靠地将uint8_t cipherBuffer转换为NSData和/或在需要解密时将NSData转换回uint8_t。解密的数据似乎被截断。
这是我怎么uint8_t加密缓冲区转换为NSData的
return [NSData dataWithBytesNoCopy:cipherBuffer length:BUFFER_SIZE];
我这是怎么转换加密的NSData回uint8_t缓冲区时,是时候对其进行解密:
uint8_t *cipherBuffer = (uint8_t*)[cipherText bytes];
感谢JGH和乔迪;
我改变了加密方法的malloc缓冲区,并尝试了几种方法来写字节的NSData,伤口与:
return [NSData dataWithBytes:(const void *)cipherBuffer length:CIPHER_BUFFER_SIZE];
什么终于解决了该问题正在改变,我在创建uint8_t方式解密方法。
const uint8_t *cipherBuffer = (const uint8_t*)[data bytes];
没有看到你如何创建cipherBuffer,很难说明它为什么不能正常工作。但是,从dataWithBytesNoCopy的文档中,
返回的对象获取字节指针的所有权并在释放时释放它。因此,字节必须指向使用malloc分配的内存块。
如果你只是声明cipherBuffer作为
uint8_t cipherBuffer[BUFFER_SIZE];
它可以解释你的问题。相反,使用malloc:
uint8_t* cipherBuffer = malloc(BUFFER_SIZE);
缓冲区正在像这样分配,我会尝试malloc uint8_t * cipherBuffer; cipherBuffer =(uint8_t *)calloc(CIPHER_BUFFER_SIZE,sizeof(uint8_t)); – 2012-08-07 00:27:06
这听起来像你给它一个原始指针,然后重新使用该指针。
dataWithBytesNoCopy:想要保留指针给它。实际上,你必须给它一个你用malloc创建的指针,因为它会在数据完成时释放()它。
如果你不想NSData对象采取所有权,你应该使用dataWithBytesNoCopy:长度:freeWhenDone:
只是为了确保cipherBuffer是一个缓冲区,它是在malloc里面的方法吗? – 2012-08-05 21:32:24
你正在使用自动(函数范围)数组还是你malloc的一些内存? – 2012-08-05 21:32:31