首页指南参考教程

Expo 加密 iconExpo 加密

用于加密操作的通用库。

Android
iOS
tvOS
Web

expo-crypto 使你能够以与 Node.js 核心 crypto API 等效的方式对数据进行哈希处理。

¥expo-crypto enables you to hash data in an equivalent manner to the Node.js core crypto API.

安装

¥Installation

Terminal
npx expo install expo-crypto

If you are installing this in an existing React Native app (bare workflow), start by installing expo in your project. Then, follow the additional instructions as mentioned by library's README under "Installation in bare React Native projects" section.

用法

¥Usage

Basic Crypto usage
import React, { useEffect } from 'react';
import { StyleSheet, View, Text } from 'react-native';
import * as Crypto from 'expo-crypto';

export default function App() {
  useEffect(() => {
    (async () => {
      const digest = await Crypto.digestStringAsync(
        Crypto.CryptoDigestAlgorithm.SHA256,
        'GitHub stars are neat 🌟'
      );
      console.log('Digest: ', digest);
      /* Some crypto operation... */
    })();
  }, []);

  return (
    <View style={styles.container}>
      <Text>Crypto Module Example</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
});

API

import * as Crypto from 'expo-crypto';

Methods

Crypto.digest(algorithm, data)

NameTypeDescription
algorithmCryptoDigestAlgorithm

The cryptographic hash function to use to transform a block of data into a fixed-size output.

dataBufferSource

The value that will be used to generate a digest.


The digest() method of Crypto generates a digest of the supplied TypedArray of bytes data with the provided digest algorithm. A digest is a short fixed-length value derived from some variable-length input. Cryptographic digests should exhibit collision-resistance, meaning that it's very difficult to generate multiple inputs that have equal digest values. On web, this method can only be called from a secure origin (HTTPS) otherwise, an error will be thrown.

Returns:

Promise<ArrayBuffer>

A Promise which fulfills with an ArrayBuffer representing the hashed input.

Example

const array = new Uint8Array([1, 2, 3, 4, 5]);
const digest = await Crypto.digest(Crypto.CryptoDigestAlgorithm.SHA512, array);
console.log('Your digest: ' + digest);

Crypto.digestStringAsync(algorithm, data, options)

NameTypeDescription
algorithmCryptoDigestAlgorithm

The cryptographic hash function to use to transform a block of data into a fixed-size output.

datastring

The value that will be used to generate a digest.

options
(optional)
CryptoDigestOptions

Format of the digest string. Defaults to: CryptoDigestOptions.HEX.


The digestStringAsync() method of Crypto generates a digest of the supplied data string with the provided digest algorithm. A digest is a short fixed-length value derived from some variable-length input. Cryptographic digests should exhibit collision-resistance, meaning that it's very difficult to generate multiple inputs that have equal digest values. You can specify the returned string format as one of CryptoEncoding. By default, the resolved value will be formatted as a HEX string. On web, this method can only be called from a secure origin (HTTPS) otherwise, an error will be thrown.

Returns:

Promise<Digest>

Return a Promise which fulfills with a value representing the hashed input.

Example

const digest = await Crypto.digestStringAsync(
  Crypto.CryptoDigestAlgorithm.SHA512,
  '🥓 Easy to Digest! 💙'
);

Crypto.getRandomBytes(byteCount)

NameTypeDescription
byteCountnumber

A number within the range from 0 to 1024. Anything else will throw a TypeError.


Generates completely random bytes using native implementations. The byteCount property is a number indicating the number of bytes to generate in the form of a Uint8Array. Falls back to Math.random during development to prevent issues with React Native Debugger.

Returns:

Uint8Array

An array of random bytes with the same length as the byteCount.

Crypto.getRandomBytesAsync(byteCount)

NameTypeDescription
byteCountnumber

A number within the range from 0 to 1024. Anything else will throw a TypeError.


Generates completely random bytes using native implementations. The byteCount property is a number indicating the number of bytes to generate in the form of a Uint8Array.

Returns:

Promise<Uint8Array>

A promise that fulfills with an array of random bytes with the same length as the byteCount.

Crypto.getRandomValues<T>(typedArray)

NameTypeDescription
typedArrayT

An integer based TypedArray to fill with cryptographically secure random values. It modifies the input array in place.


The getRandomValues() method of Crypto fills a provided TypedArray with cryptographically secure random values.

Returns:

T

The input array filled with cryptographically secure random values.

Example

const byteArray = new Uint8Array(16);
Crypto.getRandomValues(byteArray);
console.log('Your lucky bytes: ' + byteArray);

Crypto.randomUUID()

The randomUUID() method returns a unique identifier based on the V4 UUID spec (RFC4122). It uses cryptographically secure random values to generate the UUID.

Returns:

string

A string containing a newly generated UUIDv4 identifier

Example

const UUID = Crypto.randomUUID();
console.log('Your UUID: ' + UUID);

Types

CryptoDigestOptions

NameTypeDescription
encodingCryptoEncoding

Format the digest is returned in.

Digest

Type: string

Enums

CryptoDigestAlgorithm

Cryptographic hash function

CryptoDigestAlgorithm Values

Only for:
iOS

MD2

CryptoDigestAlgorithm.MD2 = "MD2"

128 bits.

Only for:
iOS

MD4

CryptoDigestAlgorithm.MD4 = "MD4"

128 bits.

Only for:
Android
iOS

MD5

CryptoDigestAlgorithm.MD5 = "MD5"

128 bits.

SHA1

CryptoDigestAlgorithm.SHA1 = "SHA-1"

160 bits.

SHA256

CryptoDigestAlgorithm.SHA256 = "SHA-256"

256 bits. Collision Resistant.

SHA384

CryptoDigestAlgorithm.SHA384 = "SHA-384"

384 bits. Collision Resistant.

SHA512

CryptoDigestAlgorithm.SHA512 = "SHA-512"

512 bits. Collision Resistant.

CryptoEncoding

CryptoEncoding Values

BASE64

CryptoEncoding.BASE64 = "base64"

Has trailing padding. Does not wrap lines. Does not have a trailing newline.

HEX

CryptoEncoding.HEX = "hex"

错误代码

¥Error codes

代码描述
ERR_CRYPTO_UNAVAILABLE仅限网络。对 WebCrypto API 的访问仅限于安全来源 (localhost/https)。
ERR_CRYPTO_DIGEST提供的编码类型无效。
Expo 中文网 - 粤ICP备13048890号