

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 的相容性 適用於 JavaScript 的 AWS Encryption SDK
<a name="javascript-compatibility"></a>

 適用於 JavaScript 的 AWS Encryption SDK 旨在與 的其他語言實作互通 AWS Encryption SDK。在大多數情況下，您可以使用 加密資料 適用於 JavaScript 的 AWS Encryption SDK ，並使用任何其他語言實作解密資料，包括 [AWS Encryption SDK 命令列界面](crypto-cli.md)。您也可以使用 適用於 JavaScript 的 AWS Encryption SDK 來解密 其他語言實作所產生的[加密訊息](concepts.md#message) AWS Encryption SDK。

不過，當您使用 時 適用於 JavaScript 的 AWS Encryption SDK，您需要注意 JavaScript 語言實作和 Web 瀏覽器中的一些相容性問題。

此外，使用不同的語言實作時，請務必設定相容的主金鑰提供者、主金鑰和 keyring。如需詳細資訊，請參閱[Keyring 相容性](choose-keyring.md#keyring-compatibility)。

## 適用於 JavaScript 的 AWS Encryption SDK 相容性
<a name="javascript-language-compatibility"></a>

的 JavaScript 實作與其他語言實作 AWS Encryption SDK 不同，方式如下：
+ 的加密操作 適用於 JavaScript 的 AWS Encryption SDK 不會傳回非影格加密文字。不過， 適用於 JavaScript 的 AWS Encryption SDK 會解密 其他語言實作傳回的框架和非框架加密文字 AWS Encryption SDK。
+ 從 Node.js 版本 12.9.0 開始，Node.js 支援以下 RSA 金鑰包裝選項：
  + 具有 SHA1、SHA256、SHA384 或 SHA512 的 OAEP
  + 具有 SHA1 的 OAEP 和具有 SHA1 的 MGF1
  + PKCS1v15
+ 在版本 12.9.0 之前，Node.js 僅支援以下 RSA 金鑰包裝選項：
  + 具有 SHA1 的 OAEP 和具有 SHA1 的 MGF1
  + PKCS1v15

## 瀏覽器相容性
<a name="javascript-browser-compatibility"></a>

某些 Web 瀏覽器不支援 適用於 JavaScript 的 AWS Encryption SDK 所需的基本密碼編譯操作。您可以透過瀏覽器實作的 WebCrypto API 設定備用來彌補部分遺漏的操作。

**Web 瀏覽器限制**

下列限制為所有 Web 瀏覽器通用：
+ WebCrypto API 不支援 PKCS1v15 金鑰包裝。
+ 瀏覽器不支援 192 位元金鑰。

**必要的密碼編譯操作**

在 Web 瀏覽器中， 適用於 JavaScript 的 AWS Encryption SDK 需要下列操作。如果瀏覽器不支援這些操作，則它與 適用於 JavaScript 的 AWS Encryption SDK相容。
+ 瀏覽器必須包含 `crypto.getRandomValues()`，這是一種以密碼編譯方式產生隨機值的方法。如需支援 `crypto.getRandomValues()` 之 Web 瀏覽器版本的相關資訊，請參閱[我可以使用 crypto.getRandomValues() 嗎？](https://caniuse.com/#feat=getrandomvalues)。

**必要的備用**

 適用於 JavaScript 的 AWS Encryption SDK 需要在 Web 瀏覽器中執行下列程式庫和操作。如果您支援不符合這些需求的 Web 瀏覽器，則必須設定備用。否則，嘗試 適用於 JavaScript 的 AWS Encryption SDK 搭配瀏覽器使用 將會失敗。
+ 會在 Web 應用程式中執行基本密碼編譯操作的 WebCrypto API，並非可在所有瀏覽器上使用。如需支援 Web 密碼編譯的 Web 瀏覽器版本的相關資訊，請參閱[我可以使用 Web 密碼編譯嗎？](https://caniuse.com/#feat=cryptography)。
+ Safari Web 瀏覽器的現代版本不支援 AWS Encryption SDK 所需的零位元組 AES-GCM 加密。如果瀏覽器實作 WebCrypto API，但無法使用 AES-GCM 加密零位元組，則 只會 適用於 JavaScript 的 AWS Encryption SDK 使用備用程式庫進行零位元組加密。它會使用 WebCrypto API 進行所有其他操作。

若要設定任一限制的備用，請將下列陳述式新增至您的程式碼。在 [configureFallback](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/modules/web-crypto-backend/src/backend-factory.ts#L78) 函數中，指定支援遺漏功能的程式庫。下列範例會使用 Microsoft Research JavaScript Cryptography Library (`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)
```