react-native - 如何安全地保存 redux-persist-transform-encrypt key ?

标签 react-native security redux redux-persist

我正在尝试坚持并加密我的 native 应用程序的 redux 存储。
我正在尝试使用 redux-persist-transform-encrypt根据文档:

import { persistReducer } from 'redux-persist'
import createEncryptor from 'redux-persist-transform-encrypt'

const encryptor = createEncryptor({
  secretKey: 'my-super-secret-key'
})

const reducer = persistReducer(
  {
    transforms: [encryptor]
  },
  baseReducer
)
但重要的是找到一种安全的方式来存储“我的 super secret key ”。
我已经成功地从用户输入中得到它并用 react-native-keychain 保存它.
现在的问题是从钥匙串(keychain)中获取 key 的函数是异步的,我需要在商店初始化之前获取 key 。
结果看起来像这样
import { persistReducer } from 'redux-persist'
import createEncryptor from 'redux-persist-transform-encrypt'

const encryptionKey = // get the key here from the keychain before initiating the store

const encryptor = createEncryptor({
  secretKey: encryptionKey
})

const reducer = persistReducer(
  {
    transforms: [encryptor]
  },
  baseReducer
)
有人对我有任何解决方法吗?

最佳答案

我也花了一些时间来解决这个问题。起初,我找到了一个不错的库,可以将生成的 key 保存到名为 react-native-sensitive-info 的钥匙串(keychain)中。 .之后我遇到了获取和设置生成的 key 是异步的问题。然后我发现 AsyncStorage 在 persistReducer 的配置中用作存储。有办法 - 让我们创建一个使用 react-native-sensitive-info 的存储.过了一会儿,我偶然发现了一个已经存在并且正在实现完全相同逻辑的库。就是这样-> redux-persist-sensitive-storage .
只需像这样使用它:

...
import createSensitiveStorage from 'redux-persist-sensitive-storage';

const appReducer = combineReducers(myReducers);

const persistConfig = {
  key: 'root',
  storage: createSensitiveStorage({
    keychainService: 'myKeychain',
    sharedPreferencesName: 'mySharedPrefs'
  })
}

const persistedReducer = persistReducer(persistConfig, appReducer);
const store = createStore(persistedReducer, applyMiddleware(thunkMiddleware));
const persistor = persistStore(store);
...
就是这样!

关于react-native - 如何安全地保存 redux-persist-transform-encrypt key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64976487/

相关文章:

firebase - React Native Firebase 分析不保存特定用户属性

javascript - React Native 和 Firebase - Firebase 函数作为引用

android - 从 Android 设备库中获取视频 react-native

java - 使用外部机器的 URL 和端口打开 Socket 来播放流音频的安全问题

javascript - React 不会在 props 改变时重新渲染

javascript - Concat 实际上是连接而不是添加到数组。 react native JavaScript

android - 在 Android 和 Web API .NET 之间发送加密字符串

bash - SSHD 配置检查 bash 脚本

android - 热重载不起作用,需要Hot Restart Flutter

android - 未定义不是 React Native 项目中的函数