React Native 中如何校验 redux 存储内容是否已加密
直接读取原始存储数据校验
如果你使用AsyncStorage作为默认存储介质,在调试阶段直接执行代码打印存储内容:console.log(await AsyncStorage.getItem('persist:root'))其中
persist:root替换为你配置persist时自定义的key值。如果输出内容中,各个子reducer对应的value都是不可读的加密串(通常是Base64格式乱码),看不到明文的state字段和业务数据,即说明加密生效。
如果使用SQLite、Realm等其他存储介质,直接打开对应的本地存储文件查看对应条目,没有明文JSON结构的state数据即可确认加密成功。篡改密钥校验解密逻辑
把你配置加密transform时传入的secretKey改为任意其他字符串,重启应用后如果redux的state自动重置为初始值,无法读取到之前存储的业务数据,说明原有数据是和原密钥绑定加密的,确实处于加密状态。测试完成后记得改回原密钥,否则原有存储数据会永久无法读取。导出应用本地存储文件校验
安卓端可通过adb命令导出应用私有目录下的存储文件,iOS端可直接打开模拟器沙盒目录找到存储文件,用文本编辑器打开后如果看不到明文的业务数据,即可确认加密生效。注释加密配置做对比测试
暂时注释掉redux-persist配置项transforms数组中的加密transform,重新运行应用写入测试数据,此时读取到的存储内容为明文JSON结构。和开启加密后的存储内容做对比,两者可读性差异明显即可确认加密逻辑正常运行。
注意:如果你配置时仅指定了对部分reducer加密,校验时仅需确认指定加密的reducer对应的存储字段为密文即可,未指定的reducer默认会以明文存储。
内容的提问来源于stack exchange,提问作者Akila Devinda

