【发布时间】:2016-06-27 17:32:08
【问题描述】:
realm 是否有任何 react-native 支持用于加密领域数据库的密钥生成/密钥存储?在编写任何本机模块之前,我想与在领域工作的团队核实。如果有任何 node 模块支持 react native,那会很有帮助。
提前致谢。
【问题讨论】:
标签: encryption react-native realm
realm 是否有任何 react-native 支持用于加密领域数据库的密钥生成/密钥存储?在编写任何本机模块之前,我想与在领域工作的团队核实。如果有任何 node 模块支持 react native,那会很有帮助。
提前致谢。
【问题讨论】:
标签: encryption react-native realm
Realm 不提供任何用于生成或存储加密密钥的 API。我在下面复制我过去在这个问题上发表的评论,只是为了提供我对在 React Native 上处理加密领域时应该考虑的一些考虑因素的想法......
react-native-keychain 模块仅支持密码字符串,而 Realm 需要一个 512 位(64 字节)数据 blob 作为 ArrayBuffer 或 ArrayBufferView(例如 Uint8Array 等)。
如果您是随机生成密码,那么我建议在使用react-native-keychain 存储之前将该数据进行base64 编码为字符串,然后在将其取出时进行base64 解码。我建议查看 base64-js 处理原始数据(atob/btoa 只处理字符串)。
另一方面,如果用户提供密码,那么您可以将其直接存储在钥匙串中,并使用该密码的 512 位散列作为加密密钥。 SHA-512 散列可以实现这一点,但通常使用加密时,您希望使用包含盐的散列算法,并且从根本上讲速度很慢,因此更难暴力破解。这样做的标准是PBKDF2,尽管存在更新更好的散列方法。我建议您查看crypto-js 或pbkdf2-js。
【讨论】:
generateKeyForRealm() 方法只是返回一个完全随机的 64 字节(512 位)密钥。
对此进行一点扩展。您可以使用https://asecuritysite.com/encryption/PBKDF2z 之类的网站生成一个 64 字节的散列作为十六进制字符串和 base64 字符串。
您可以使用领域浏览器 GUI 中的十六进制字符串来解锁领域文件。您可以将 base64 字符串与上述 base64-js 库一起使用。只需将 base64 字符串传递到 base64js.toByteArray() 中,这就是您将在 new Realm({encryptionKey: key...}) 中使用的密钥
【讨论】: