Node crypto模块的快速实现。
注意:此版本
1.x正在进行重大重构,移植到新架构、Bridgeless 和Nitro Modules,与0.x版本相比并不完整。与往常一样,状态将在implementation-coverage.md 中表示。
注意:React Native 支持的最低版本是
0.75。如果您需要使用早期版本,请使用该库的0.x版本。
与当前任何其他基于 JS 的 polyfill 不同,react-native-quick-crypto 是用 C/C++ JSI 编写的,可提供更高的性能 - 特别是在移动设备上。 QuickCrypto 可用作 Web3/Crypto 应用程序的直接替代品,以加速常见的加密功能。
| 版本 | RN架构 | 模块 |
|---|---|---|
1.x | 新-> | 硝基模块 -> |
0.x | 老的 | 桥梁与JSI |
例如,使用 ethers.js 创建钱包使用复杂的算法来生成私钥/助记词对:
const start = performance . now ( ) ;
const wallet = ethers . Wallet . createRandom ( ) ;
const end = performance . now ( ) ;
console . log ( `Creating a Wallet took ${ end - start } ms.` ) ;没有react-native-quick-crypto?:
Creating a Wallet took 16862 ms
使用react-native-quick-crypto ⚡️:
Creating a Wallet took 289 ms
bun add react-native-quick-crypto react-native-nitro-modules
cd ios && pod installexpo install react-native-quick-crypto
expo prebuild可选:尽早覆盖应用程序中的global.Buffer和global.crypto例如在index.js中。
import { install } from 'react-native-quick-crypto' ;
install ( ) ; crypto-browserify如果您使用的库依赖于crypto ,则可以使用react-native-quick-crypto来实现完全本机实现,而不是使用crypto-browserify (或react-native-crypto )对其进行填充。这样,您只需进行单行更改即可获得更快的加密操作!
使用metro.config.js中的resolveRequest配置选项
config . resolver . resolveRequest = ( context , moduleName , platform ) => {
if ( moduleName === 'crypto' ) {
// when importing crypto, resolve to react-native-quick-crypto
return context . resolveRequest (
context ,
'react-native-quick-crypto' ,
platform ,
)
}
// otherwise chain to the standard Metro resolver.
return context . resolveRequest ( context , moduleName , platform )
}你需要安装babel-plugin-module-resolver ,它是一个 babel 插件,它将用你传递给它的值来别名代码中的任何导入。它会欺骗任何试图导入 React Native 所需的本机版本的某些依赖项的模块。
yarn add --dev babel-plugin-module-resolver然后,在babel.config.js中,添加插件来交换crypto 、 stream和buffer依赖项:
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
plugins: [
+ [
+ 'module-resolver',
+ {
+ alias: {
+ 'crypto': 'react-native-quick-crypto',
+ 'stream': 'readable-stream',
+ 'buffer': '@craftzdog/react-native-buffer',
+ },
+ },
+ ],
...
],
};然后使用yarn start --reset-cache重新启动捆绑器。
例如,要使用 SHA256 对字符串进行哈希处理,您可以执行以下操作:
import QuickCrypto from 'react-native-quick-crypto' ;
const hashed = QuickCrypto . createHash ( 'sha256' )
. update ( 'Damn, Margelo writes hella good software!' )
. digest ( 'hex' ) ; 由于该库使用 JSI 进行同步本机方法访问,因此不再可能进行远程调试(例如使用 Chrome)。相反,您应该使用 Flipper。
尚不支持所有加密算法。有关更多详细信息,请参阅实施覆盖范围文档。如果您需要特定的算法,请打开feature request问题,我们将看看我们能做什么。
加入 Margelo 社区 Discord 来讨论 react-native-quick-crypto 或其他 Margelo 库。
React-native-quick-crypto 是由精英应用程序开发机构 Margelo 构建的。如需企业支持或其他业务咨询,请通过 [email protected] 联系我们!
请参阅贡献指南,了解如何为存储库和开发工作流程做出贡献。