This is a polyfill for the Crypto instance methods of the Web Crypto API:
crypto.getRandomValues()
crypto.randomUUID()
-
crypto.randomBytes()
(fromNode.js
)
You just need to import this library at the top of your code entry.
This library was originally developed for WeChat Miniprogram
because it does not support the Web Crypto API. This lack of support prevents the use of some third-party encryption libraries, such as crypto-js, jsencrypt, @noble/curves, etc.
向不支持 Web Crypto API 的运行环境,全局注入 Crypto 实例方法:
你只需在代码入口的顶部导入这个库。
该库最初用于微信小程序,由于小程序不支持 Web Crypto API,导致无法使用一些第三方加密库,比如 crypto-js、jsencrypt、@noble/curves 等。
NPM
npm i polyfill-crypto-methods
YARN
yarn add polyfill-crypto-methods
import 'polyfill-crypto-methods';
// Output: true
console.log(globalThis.crypto === crypto);
const int8 = crypto.getRandomValues(new Int8Array(4));
const int16 = crypto.getRandomValues(new Int16Array(4));
const int32 = crypto.getRandomValues(new Int32Array(4));
const uint8 = crypto.getRandomValues(new Uint8Array(4));
const uint16 = crypto.getRandomValues(new Uint16Array(4));
const uint32 = crypto.getRandomValues(new Uint32Array(4));
// Output: [-69, 52, -69, 8]
console.log(int8);
// Output: [-12857, 11870, 1874, -30545]
console.log(int16);
// Output: [740598374, 1682174651, -440338757, -391071704]
console.log(int32);
// Output: [133, 69, 14, 216]
console.log(uint8);
// Output: [45360, 53346, 43256, 34054]
console.log(uint16);
// Output: [1771376779, 3593883952, 3543639388, 2288005852]
console.log(uint32);
const uuid = crypto.randomUUID();
// Output: "e6c5350a-b7f3-9b9c-3a3c-d0eab9e63122"
console.log(uuid);
// Sync
const bytes = crypto.randomBytes(4);
// Output: [123, 56, 189, 201]
console.log(bytes);
// Async
const ret = crypto.randomBytes(4, (err, arr) => {
// Output: null, [92, 112, 228, 144]
console.log(err, arr);
});
import { crypto as myCrypto } from 'polyfill-crypto-methods';
// Output: true
console.log(globalThis.crypto === myCrypto);
// Sync
const bytes = myCrypto.randomBytes(4);
// Output: [123, 56, 189, 201]
console.log(bytes);
// Async
const ret = myCrypto.randomBytes(4, (err, arr) => {
// Output: null, [92, 112, 228, 144]
console.log(err, arr);
});