对于加密领域数据库,领域是否对密钥生成/密钥存储有任何反应原生支持?在编写任何本机模块之前,我想先咨询处理领域的团队。如果有任何节点模块支持本地响应,那将是有帮助的。
提前致谢。
答案 0 :(得分:2)
Realm不提供任何用于生成或存储加密密钥的API。我正在复制我过去在这个问题上做的评论,只是为了提供我在处理React Native上的Realms加密时应该考虑的一些注意事项......
react-native-keychain模块仅支持密码字符串,而Realm希望将512位(64字节)数据blob作为ArrayBuffer
或ArrayBufferView
(例如Uint8Array
,等人)。
如果你是随机生成一个密码,那么我建议在用react-native-keychain
存储之前将这些数据编码为字符串6464,然后在你拿出它时对它进行base64解码。我建议您查看base64-js以处理原始数据(atob
/ btoa
仅处理字符串)。
另一方面,如果用户提供密码,则可以将其直接存储在钥匙串中,并使用该密码的512位哈希作为加密密钥。 SHA-512哈希可以实现这一点,但通常使用加密,您希望使用包含盐的哈希算法,并且从根本上来说很慢,从而使暴力更难。执行此操作的标准是PBKDF2,但存在更新且更好的散列方法。我建议您查看crypto-js或pbkdf2-js。
答案 1 :(得分:0)
稍微扩展一下。您可以使用https://asecuritysite.com/encryption/PBKDF2z之类的站点生成64字节哈希作为十六进制字符串和base64字符串。
您可以使用Realm Browser GUI中的十六进制字符串来解锁领域文件。您可以将base64字符串与上面提到的base64-js库一起使用。只需将base64字符串传递给base64js.toByteArray(),这就是你在新Realm中使用的密钥({encryptionKey:key ...})