gpt4 book ai didi

ios - 是否可以在不明确说明 key 的情况下使用预填充的加密 Realm 文件?

转载 作者:可可西里 更新时间:2023-11-01 01:36:29 24 4
gpt4 key购买 nike

我想使用预先填充数据的加密 Realm 数据库。问题是我生成 key 并将其存储在本地设备上,因此您可以想象,当我将该 Realm 文件带到另一台设备时, key 不起作用。这就是我生成加密 key 的方式。

func getKey() -> NSData {
// Identifier for our keychain entry - should be unique for your application
let keychainIdentifier = "io.Realm.Test12345"
let keychainIdentifierData = keychainIdentifier.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!

// First check in the keychain for an existing key
var query: [NSString: AnyObject] = [
kSecClass: kSecClassKey,
kSecAttrApplicationTag: keychainIdentifierData,
kSecAttrKeySizeInBits: 512,
kSecReturnData: true
]

// To avoid Swift optimization bug, should use withUnsafeMutablePointer() function to retrieve the keychain item
// See also: http://stackoverflow.com/questions/24145838/querying-ios-keychain-using-swift/27721328#27721328
var dataTypeRef: AnyObject?
var status = withUnsafeMutablePointer(&dataTypeRef) { SecItemCopyMatching(query, UnsafeMutablePointer($0)) }
if status == errSecSuccess {
return dataTypeRef as! NSData
}

// No pre-existing key from this application, so generate a new one
let keyData = NSMutableData(length: 64)!
SecRandomCopyBytes(kSecRandomDefault, 64, UnsafeMutablePointer<UInt8>(keyData.mutableBytes))

// Store the key in the keychain
query = [
kSecClass: kSecClassKey,
kSecAttrApplicationTag: keychainIdentifierData,
kSecAttrKeySizeInBits: 512,
kSecValueData: keyData
]

status = SecItemAdd(query, nil)
assert(status == errSecSuccess, "Failed to insert the new key in the keychain")

return keyData
}

有什么方法可以在不明确说明可以在所有设备上打开文件的 key 的情况下执行此操作?我想我可以在代码中逐行生成数据库,并确保它从一开始就被加密,但这并不方便。

最佳答案

如果不明确指定加密 key ,就无法加密 Realm。如果您在创建 Realm 文件时没有提供加密 key ,它将以未加密的方式创建,如果您之后尝试使用不同的 key ,文件将拒绝打开。

可以通过使用新 key 保存副本来更改 Realm 文件的加密 key 。您可能会做的事情是为加密的 Realm 提供混淆的加密 key 以及应用程序,并且在应用程序首次启动时,它会创建该 Realm 文件的本地副本,并使用设备生成的加密 key 成为在那之后的主要 Realm 。

如果您想要额外的安全性并且不想将初始加密 key 烘焙到应用程序中,您还可以考虑将加密的 Realm 文件与应用程序一起包含在内,但是您需要执行安全的 Web 请求来下载加密键打开它。

我希望这能给你一些想法! :)

关于ios - 是否可以在不明确说明 key 的情况下使用预填充的加密 Realm 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com