【发布时间】:2012-01-08 04:21:53
【问题描述】:
我正在尝试在 Objective-c (Mac OS) 中创建一个 16 字节和后来的 32 字节初始化向量。我拿了一些关于如何创建随机字节的代码并将其修改为 16 个字节,但我对此有一些困难。 NSData 转储十六进制,但 NSString 转储给出 nil,而 cstring NSLog 给出错误数量的字符(此处转储中未重现相同)。
这是我的终端输出:
2012-01-07 14:29:07.705 Test3Test[4633:80f] iv hex <48ea262d efd8f5f5 f8021126 fd74c9fd>
2012-01-07 14:29:07.710 Test3Test[4633:80f] IV string: (null)
2012-01-07 14:29:07.711 Test3Test[4633:80f] IV char string t^Q¶�^��^A
这里是主程序:
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//NSString *iv_string = [NSString stringWithCString:iv encoding:NSUTF8StringEncoding];
testclass *obj = [testclass alloc];
NSData *iv_data = [obj createRandomNSData];
//[iv_string dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"iv hex %@",iv_data);
//NSString *iv_string = [[NSString alloc] initWithBytes:[iv_data bytes] length:16 encoding:NSUTF8StringE$
NSString *iv_string = [[NSString alloc] initWithData:iv_data encoding:NSUTF8StringEncoding];
NSLog(@"IV string: %@",iv_string);
NSLog(@"IV char string %.*s",[iv_data bytes]);
return 0;
]
(我在上面留下了一些我尝试过但也没有工作的注释代码)。
下面是我的随机数生成器,取自堆栈溢出示例:
@implementation testclass
-(NSData*)createRandomNSData
{
int twentyMb = 16;
NSMutableData* theData = [NSMutableData dataWithCapacity:twentyMb];
for( unsigned int i = 0 ; i < twentyMb/4 ; ++i )
{
u_int32_t randomBits = arc4random();
[theData appendBytes:(void*)&randomBits length:4];
}
NSData *data = [NSData dataWithData:theData];
[theData dealloc];
return data;
}
@end
对于这里可能出现的问题,我真的一无所知。如果我有数据作为字节,它应该转换为字符串还是不一定?我在 stackoverflow 上查看了相关示例,但没有一个在这种情况下有效。
谢谢, 以利亚
【问题讨论】:
标签: objective-c c cocoa encryption