

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 的兼容性 AWS Encryption SDK for JavaScript
<a name="javascript-compatibility"></a>

 AWS Encryption SDK for JavaScript 旨在与的其他语言实现实现互操作。 AWS Encryption SDK在大多数情况下，您可以使用加密数据，也可以使用任何其他语言实现（包括[AWS Encryption SDK 命令行界](crypto-cli.md)面）对其进行解密。 AWS Encryption SDK for JavaScript 而且，您可以使用 AWS Encryption SDK for JavaScript 来解密由的其他语言实现生成的[加密消息](concepts.md#message)。 AWS Encryption SDK

但是，在使用时 AWS Encryption SDK for JavaScript，您需要注意 JavaScript 语言实现和 Web 浏览器中的一些兼容性问题。

此外，在使用不同的语言实施时，请务必配置兼容的主密钥提供程序、主密钥和密钥环。有关更多信息，请参阅 [密钥环兼容性](choose-keyring.md#keyring-compatibility)。

## AWS Encryption SDK for JavaScript 兼容性
<a name="javascript-language-compatibility"></a>

的 JavaScript 实现与其他语言实现的 AWS Encryption SDK 不同之处在于：
+ 的加密操作 AWS Encryption SDK for JavaScript 不会返回非成帧的密文。但是， AWS Encryption SDK for JavaScript 将解密其他语言实现返回的带框和非成帧的密文。 AWS Encryption SDK
+ 从 Node.js 12.9.0 版开始，Node.js 支持以下 RSA 密钥包装选项：
  + OAEP 带有 SHA1、 SHA256、 SHA384、或 SHA512
  + OAEP 有 SHA1 和 MGF1 带有 SHA1
  + PKCS1v15
+ 在 12.9.0 版之前，Node.js 仅支持以下 RSA 密钥包装选项：
  + OAEP 有 SHA1 和 MGF1 带有 SHA1
  + PKCS1v15

## 浏览器兼容性
<a name="javascript-browser-compatibility"></a>

某些 Web 浏览器不支持 AWS Encryption SDK for JavaScript 所需的基本加密操作。您可以通过为浏览器实现的 WebCrypto API 配置备用来弥补一些缺失的操作。

**Web 浏览器限制**

以下限制是所有 Web 浏览器通用的：
+  WebCrypto API 不支持 PKCS1v15 密钥封装。
+ 浏览器不支持 192 位密钥。

**所需的加密操作**

 AWS Encryption SDK for JavaScript 需要在 Web 浏览器中执行以下操作。如果浏览器不支持这些操作，则它与 AWS Encryption SDK for JavaScript不兼容。
+ 浏览器必须包含 `crypto.getRandomValues()`，这是一种生成加密随机值的方法。有关支持的 Web 浏览器版本的信息`crypto.getRandomValues()`，请参阅[我能否使用加密货币。 getRandomValues()？](https://caniuse.com/#feat=getrandomvalues) 。

**所需的回退**

 AWS Encryption SDK for JavaScript 需要在 Web 浏览器中使用以下库和操作。如果您支持的 Web 浏览器不满足这些要求，您必须配置回退。否则，尝试在浏览器中 AWS Encryption SDK for JavaScript 使用将失败。
+ 该 WebCrypto API在Web应用程序中执行基本的加密操作，但并非适用于所有浏览器。有关支持 Web 加密的 Web 浏览器版本的信息，请参阅[我是否可以使用 Web 加密？](https://caniuse.com/#feat=cryptography)。
+ 现代版本的 Safari 网络浏览器不支持 AES-GCM 零字节加密，这是必需的。 AWS Encryption SDK 如果浏览器实现了 WebCrypto API，但无法使用 AES-GCM 加密零字节，则仅 AWS Encryption SDK for JavaScript 使用备用库进行零字节加密。它使用 WebCrypto API 进行所有其他操作。

要为这两种限制配置回退，请将以下语句添加到代码中。在 [configureFallback](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/web-crypto-backend/src/backend-factory.ts#L78) 函数中，指定一个支持缺少的功能的库。以下示例使用 Microsoft JavaScript Research 密码学库 (`msrcrypto`)，但你可以将其替换为兼容的库。有关完整的示例，请参阅 [fallback.ts](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/example-browser/src/fallback.ts)。

```
import { configureFallback } from '@aws-crypto/client-browser'
configureFallback(msrCrypto)
```