从密钥字符串生成64字节长的NSData [英] Generating 64 bytes long NSData from key string

查看:185
本文介绍了从密钥字符串生成64字节长的NSData的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我认为这会产生随机的64字节NSData。

  uint8_t buffer [64]; 
SecRandomCopyBytes(kSecRandomDefault,64,缓冲区);
NSData * keyData = [[NSData alloc] initWithBytes:buffer length:sizeof(buffer)];

我想生成64字节NSData,但不是随机数据。
如何使用给定的键生成64个字节的NSData,如com.this.is.akey。



尝试了这个,但它给了我错误的字节大小(不是64字节)。

  NSString * base64EncodedString = [[@somekey.heredataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0 ]。 
NSData * encodedData = [[NSData alloc] initWithBase64EncodedString:base64EncodedString
options:0];


解决方案

您可以使用 NSString dataUsingEncoding:] NSString 转换为 NSData

  NSString * key = @com.this.is.akey; 
NSData * keyData = [key dataUsingEncoding:NSASCIIStringEncoding];

如果数据长度小于或大于64字节,则应该将数据填充或截断64字节。

  if(keyData.length!= 64){
NSMutableData * mutableData = keyData.mutableCopy;
mutableData.length = 64;
keyData = mutableData.copy;
}

然后,您可以传递 NSData object to RLMRealmConfiguration.encryptionKey

  RLMRealmConfiguration * config = [RLMRealmConfiguration defaultConfiguration]; 
config.encryptionKey = keyData;

NSError * error = nil;
RLMRealm * realm = [RLMRealm realmWithConfiguration:config error:& error];


I think this generates random 64 bytes NSData.

uint8_t buffer[64];
SecRandomCopyBytes(kSecRandomDefault, 64, buffer);
NSData *keyData = [[NSData alloc] initWithBytes:buffer length:sizeof(buffer)];

I want to generate 64 bytes NSData like this but not a random data. How can I generate 64 bytes NSData with a given key like "com.this.is.akey".

Tried this one but it gave me wrong bytes size(not 64 bytes).

NSString *base64EncodedString = [[@"somekey.here" dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];
NSData *encodedData = [[NSData alloc] initWithBase64EncodedString:base64EncodedString
                                                          options:0];

解决方案

You can use -[NSString dataUsingEncoding:] to convert NSString to NSData.

NSString *key = @"com.this.is.akey";
NSData *keyData = [key dataUsingEncoding:NSASCIIStringEncoding];

If length of the data is less or greater than 64 bytes, you should pad or truncate data to exact 64 bytes.

if (keyData.length != 64) {
    NSMutableData *mutableData = keyData.mutableCopy;
    mutableData.length = 64;
    keyData = mutableData.copy;
}

Then, you can pass the NSData object to RLMRealmConfiguration.encryptionKey.

RLMRealmConfiguration *config = [RLMRealmConfiguration defaultConfiguration];
config.encryptionKey = keyData;

NSError *error = nil;
RLMRealm *realm = [RLMRealm realmWithConfiguration:config error:&error];

这篇关于从密钥字符串生成64字节长的NSData的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆