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 install
expo 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] 联系我们!
请参阅贡献指南,了解如何为存储库和开发工作流程做出贡献。