实现React Native中crypto.getRandomValues的polyfill

需积分: 22 0 下载量 112 浏览量 更新于2024-12-16 收藏 13KB ZIP 举报
资源摘要信息:"react-native-get-random-values是一个为React Native环境提供的工具库,它实现了crypto.getRandomValues方法。这一方法在Web环境中原本是crypto对象提供的,用于生成加密安全的随机值。在React Native环境中,原生的crypto模块可能不存在或者不包含getRandomValues方法,这导致一些依赖于此方法的库无法正常使用。react-native-get-random-values库通过模拟实现crypto.getRandomValues方法,解决了这个问题。开发者可以通过npm包管理器安装此库,然后通过简单的配置,即可在React Native应用中全局使用crypto.getRandomValues。" 1. React Native环境下的crypto模块: React Native是一个用于构建移动应用的JavaScript框架,它允许开发者使用JavaScript和React来编写原生移动应用。在React Native中,可以使用JavaScript的全局对象crypto来实现加密相关的功能,其中getRandomValues是crypto对象的一个方法,用于生成加密安全的随机数据。 2. crypto.getRandomValues方法的重要性: crypto.getRandomValues方法的重要性在于它能够提供高质量的随机数据,这对于加密操作是至关重要的。例如,在生成安全的UUID(通用唯一识别码)时,就需要用到安全的随机数生成器。如果随机数生成器不够随机或者可预测,那么生成的加密密钥或令牌就可能容易受到攻击。 3. React Native中getRandomValues方法的缺失问题: React Native虽然支持许多Web API,但并不是所有Web API都能直接在React Native中使用。crypto.getRandomValues方法就是其中一个例子。这导致那些依赖于此方法的加密库在React Native中无法正常工作。这需要开发者寻找替代方案或编写兼容代码。 4. react-native-get-random-values库的作用: react-native-get-random-values库正是为了解决这一问题而创建的。它提供了一个与Web环境中的crypto.getRandomValues方法兼容的实现,这样开发者就可以在React Native项目中方便地使用这一方法。这意味着开发者可以继续使用那些原本依赖于crypto.getRandomValues的库,如uuid等。 5. 安装和配置方法: 要使用react-native-get-random-values库,开发者需要首先通过npm包管理器安装此库,命令为:`npm install --save react-native-get-random-values`。接着,需要在项目中运行`npx pod-install`来安装iOS平台的依赖。如果开发者使用的是Expo框架来管理项目,由于Expo自动处理了大多数原生依赖,因此可能不需要执行`npx pod-install`命令。 6. 使用方法: 安装完react-native-get-random-values库之后,需要在项目的入口文件(通常为`index.js`)中添加导入语句:`import 'react-native-get-random-values'`。这样,crypto.getRandomValues方法就可以被全局使用了。之后,开发者就可以使用uuid库生成安全的UUID,或者使用其他依赖于crypto.getRandomValues的库。 7. 标签含义: - react-native:表示该库与React Native框架相关。 - rng:表示随机数生成(Random Number Generation)。 - webcrypto:表示该库提供了类似Web环境的crypto API接口。 - JavaScript:表示该库是用JavaScript编写的,可以在JavaScript环境中使用。 8. 压缩包子文件名称说明: 资源摘要信息中提到的文件名称"react-native-get-random-values-master",表明了这是一个被压缩打包后的源代码文件夹名称,包含了该库的全部源代码和其他必要的文件。使用“master”后缀通常意味着这是源代码库的主要分支或主版本。开发者可以从这个压缩包中提取出库的代码,并在自己的项目中使用。 通过上述分析,可以得出react-native-get-random-values库对于在React Native环境中实现安全随机数生成的重要性,以及其安装、配置和使用的具体步骤。这将极大地方便开发者在React Native项目中使用依赖于crypto.getRandomValues的加密库。
2021-06-11 上传
经常看到有人要找AES-GCM-128  这个算法加解密 网上相关的文档也较少其中在telegram登录首页就在使用该算法 应该让不少哥们头疼 其实这个加密常见于浏览器内置接口window.crypto.subtle 该接口不仅支持该类型的加密 且支持非常多的算法加密如RSA DES  等等  这里就演示AES-GCM-128 这个类型 crypto-AES-GCM-128调用例子 function ___crypto__test(keyData, iv, data) {     const format = "raw",         // keyData = new Uint8Array([23, 113, 57, 6, 35, -69, -60, 98, 84, -17, -125, -49, 18, 6, -92, 32]),         algorithm = "AES-GCM",         extractable = true,         usages = ["encrypt", "decrypt"];     // iv = new Uint8Array([47, 46, 123, 78, 36, 14, 109, 50, 121, 64, 11, 38]);     window.crypto.subtle.importKey(         format,         keyData,         algorithm,         extractable, usages     ).then(key =gt; {         window.crypto.subtle.encrypt({                 name: algorithm,                 iv: iv             },             key,             data         ).then(result =gt; {             console.log(Array.from(new Uint8Array((result))))         })     }) } console.log(___crypto__test(             new Uint8Array([23, 113, 57, 6, 35, -69, -60, 98, 84, -17, -125, -49, 18, 6, -92, 32]),                 new Uint8Array([47, 46, 123, 78, 36, 14, 109, 50, 121, 64, 11, 38]),             new Uint8Array([50, 49, 48]) )) crypto主要相关接口介绍 crypto.subtle.importKey const result = crypto.subtle.importKey(     format,     keyData,     algorithm,     extractable,     usages ); format  是一个字符串,描述要导入的密钥的数据格式。可以是以下之一:----------raw:原始格式。----------pkcs8:PKCS#8格式。----------spki:SubjectPublicKeyInfo格式。----------jwk:JSON Web密钥格式。 - keyData 是ArrayBuffer,TypedArray,a DataView或JSONWebKey包含给定格式的键的对象。 - algorithm  是一个字典对象,用于定义要导入的密钥的类型并提供额外的算法特定参数。对于RSASSA-PKCS1-v1_5,  RSA-PSS或  RSA-OAEP:传递RsaHashedImportParams对象。对于ECDSA或ECDH:传递  EcKeyImportParams对象。对于HMAC:传递一个HmacImportParams对象。对于AES-CTR,AES-CBC,AES-GCM或AES-KW:传递标识算法的字符串或形式为的对象{ "name": ALGORITHM },其中ALGORITHM 是算法的名称。对于PBKDF2  :传递字符串PBKDF2。 - extractable 是Boolean表明它是否将有可能使用到导出密钥SubtleCrypto.exportKey()或SubtleCrypto.wrapKey()。 - ke