ios - 从 key 字符串生成 64 字节长的 NSData

标签 ios objective-c xcode encryption realm

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

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

我想生成像这样的 64 字节 NSData,但不是随机数据。 如何使用给定 key (如“com.this.is.akey”)生成 64 字节 NSData。

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

NSString *base64EncodedString = [[@"somekey.here" dataUsingEncoding: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 对象传递给 RLMRealmConfiguration.encryptionKey

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

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

关于ios - 从 key 字符串生成 64 字节长的 NSData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34854250/

相关文章:

ios - 需要有关使用核心位置计算距离的帮助

ios - socket.io swift 无法在真实设备上运行

iphone - 使用 iOS 3.2 SDK 构建 iPhone 应用程序

ios - Xcode beta 7.0 无法链接到 unwind segue

ios - 如何使 2 个 CPTXYPlotSpace 都在其中一个 CPTXYPlotSpace 上响应相同的手势?

objective-c - if else 语句的预期表达式错误

iOS聊天应用程序设计

c++ - 为 iphone 应用程序编译/使用 unrar C++ 源代码?

ios - 在 uitableviewcell 内的 Collection View 中添加属性

iphone - iOS:创建提示/帮助弹出窗口