

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

# 加密、解密和重新加密資料
<a name="crypto-ops.encryptdecrypt"></a>

加密和解密方法可用於使用各種對稱和非對稱技術加密或解密資料，包括 TDES、AES 和 RSA。這些方法也支援使用 [DUKPT](terminology.md#terms.dukpt) 和 [EMV](terminology.md#terms.emv) 技術衍生的金鑰。對於您想要在新金鑰下保護資料而不公開基礎資料的使用案例，也可以使用 ReEncrypt 命令。

**注意**  
 使用加密/解密函數時，所有輸入都假設為 hexBinary - 例如，值 1 將輸入為 31 （十六進位），小寫 t 表示為 74 （十六進位）。所有輸出也都使用 hexBinary。

如需所有可用選項的詳細資訊，請參閱適用於[加密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_EncryptData.html)、[解密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_DecryptData.html)和[重新加密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_ReEncryptData.html)的 API 指南。

**Topics**
+ [加密資料](encrypt-data.md)
+ [解密資料](decrypt-data.md)

# 加密資料
<a name="encrypt-data"></a>

 `Encrypt Data` API 用於使用對稱和非對稱資料加密金鑰以及 [DUKPT](terminology.md#terms.dukpt) 和 [EMV](terminology.md#terms.emv) 衍生的金鑰來加密資料。支援各種演算法和變化，包括 `TDES`、 `RSA`和 `AES`。

主要輸入是用來加密資料的加密金鑰、要加密的 hexBinary 格式純文字資料，以及加密屬性，例如初始化向量和 TDES 等區塊加密的模式。對於 ，純文字資料需要 8 個位元組的倍數`TDES`，對於 ，需要 16 個位元組`AES`，對於 ，需要 金鑰的長度`RSA`。如果輸入資料不符合這些要求，則應填充對稱金鑰輸入 (TDES、AES、DUKPT、EMV)。下表顯示每種類型金鑰的純文字長度上限，以及您在 `EncryptionAttributes` RSA 金鑰中定義的填補類型。


| 填補類型 | RSA\$12048 | RSA\$13072 | RSA\$14096 | 
| --- | --- | --- | --- | 
| OAEP SHA1 | 428 | 684 | 940 | 
| OAEP SHA256 | 380 | 636 | 892 | 
| OAEP SHA512 | 252 | 508 | 764 | 
| PKCS1 | 488 | 744 | 1000 | 
| None | 488 | 744 | 1000 | 

主要輸出包含 hexBinary 格式的加密資料做為加密文字，以及加密金鑰的檢查總和值。如需所有可用選項的詳細資訊，請參閱 [加密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_EncryptData.html) API 指南。

**Topics**
+ [使用 AES 對稱金鑰加密資料](#w2aac15c16c11c13)
+ [使用 DUKPT 金鑰加密資料](#w2aac15c16c11c15)
+ [使用 EMV 衍生對稱金鑰加密資料](#w2aac15c16c11c17)
+ [使用 RSA 金鑰加密資料](#crypto-ops.encrypt-rsa)

## 使用 AES 對稱金鑰加密資料
<a name="w2aac15c16c11c13"></a>

**注意**  
 所有範例都假設相關的金鑰已存在。您可以使用 [CreateKey](create-keys.md) 操作建立金鑰，或使用 [ImportKey](keys-import.md) 操作匯入金鑰。

**Example**  
 在此範例中，我們將使用使用 [CreateKey](create-keys.md) 操作建立或使用 [ImportKey](keys-import.md) 操作匯入的對稱金鑰來加密純文字資料。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Encrypt`，且 KeyUsage 設定為 `TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data encrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --plain-text 31323334313233343132333431323334 --encryption-attributes 'Symmetric={Mode=CBC}'
```

```
         
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "KeyCheckValue": "71D7AE",
    "CipherText": "33612AB9D6929C3A828EB6030082B2BD"
}
```

## 使用 DUKPT 金鑰加密資料
<a name="w2aac15c16c11c15"></a>

**Example**  
 在此範例中，我們將使用 [DUKPT](terminology.md#terms.dukpt) 金鑰加密純文字資料。 AWS 付款密碼編譯支援 `TDES`和 `AES` DUKPT 金鑰。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `DeriveKey`，且 KeyUsage 設定為 `TR31_B0_BASE_DERIVATION_KEY`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data encrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --plain-text 31323334313233343132333431323334 --encryption-attributes 'Dukpt={KeySerialNumber=FFFF9876543210E00001}'
```

```
         
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "KeyCheckValue": "71D7AE",
    "CipherText": "33612AB9D6929C3A828EB6030082B2BD"
}
```

## 使用 EMV 衍生對稱金鑰加密資料
<a name="w2aac15c16c11c17"></a>

**Example**  
 在此範例中，我們將使用已建立的 EMV 衍生對稱金鑰來加密純文字資料。您可以使用這類命令將資料傳送至 EMV 卡。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Derive`，且 KeyUsage 設定為 `TR31_E1_EMV_MKEY_CONFIDENTIALITY`或 `TR31_E6_EMV_MKEY_OTHER`。如需詳細資訊，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data encrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --plain-text 33612AB9D6929C3A828EB6030082B2BD --encryption-attributes 'Emv={MajorKeyDerivationMode=EMV_OPTION_A,PanSequenceNumber=27,PrimaryAccountNumber=1000000000000432,SessionDerivationData=02BB000000000000, InitializationVector=1500000000000999,Mode=CBC}'
```

```
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "KeyCheckValue": "71D7AE",
    "CipherText": "33612AB9D6929C3A828EB6030082B2BD"
}
```

## 使用 RSA 金鑰加密資料
<a name="crypto-ops.encrypt-rsa"></a>

**Example**  
 在此範例中，我們將使用已使用 [ImportKey](keys-import.md) 操作匯入的 [RSA 公有金鑰](terminology.md#terms.publickey)來加密純文字資料。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Encrypt`，且 KeyUsage 設定為 `TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  
 對於目前不支援的 PKCS \$17 或其他填補機制，請在呼叫服務之前套用，並透過省略填補指標 * 'Asymmetric=\$1\$1'* 來選取不填補   

```
$ aws payment-cryptography-data encrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/thfezpmsalcfwmsg --plain-text 31323334313233343132333431323334 --encryption-attributes 'Asymmetric={PaddingType=OAEP_SHA256}'
```

```
     
{
 "CipherText": "12DF6A2F64CC566D124900D68E8AFEAA794CA819876E258564D525001D00AC93047A83FB13 \ 
 E73F06329A100704FA484A15A49F06A7A2E55A241D276491AA91F6D2D8590C60CDE57A642BC64A897F4832A3930 \ 
 0FAEC7981102CA0F7370BFBF757F271EF0BB2516007AB111060A9633D1736A9158042D30C5AE11F8C5473EC70F067 \ 
 72590DEA1638E2B41FAE6FB1662258596072B13F8E2F62F5D9FAF92C12BB70F42F2ECDCF56AADF0E311D4118FE3591 \ 
 FB672998CCE9D00FFFE05D2CD154E3120C5443C8CF9131C7A6A6C05F5723B8F5C07A4003A5A6173E1B425E2B5E42AD \ 
 7A2966734309387C9938B029AFB20828ACFC6D00CD1539234A4A8D9B94CDD4F23A",
 "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/5dza7xqd6soanjtb",
 "KeyCheckValue": "FF9DE9CE"
}
```

# 解密資料
<a name="decrypt-data"></a>

 `Decrypt Data` API 用於使用對稱和非對稱資料加密金鑰以及 [DUKPT](terminology.md#terms.dukpt) 和 [EMV](terminology.md#terms.emv) 衍生的金鑰來解密資料。支援各種演算法和變化，包括 `TDES`、 `RSA`和 `AES`。

 主要輸入是用來解密資料的解密金鑰、要解密的 hexBinary 格式加密文字資料，以及初始化向量、做為區塊加密的模式等解密屬性。主要輸出包含 hexBinary 格式的純文字解密資料，以及解密金鑰的檢查總和值。如需所有可用選項的詳細資訊，請參閱 [解密](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_DecryptData.html) API 指南。

**Topics**
+ [使用 AES 對稱金鑰解密資料](#w2aac15c16c13b9)
+ [使用 DUKPT 金鑰解密資料](#w2aac15c16c13c11)
+ [使用 EMV 衍生對稱金鑰解密資料](#w2aac15c16c13c13)
+ [使用 RSA 金鑰解密資料](#crypto-ops.decrypt-rsa)

## 使用 AES 對稱金鑰解密資料
<a name="w2aac15c16c13b9"></a>

**Example**  
 在此範例中，我們將使用對稱金鑰解密加密文字資料。此範例顯示 `AES`金鑰，但也支援 `TDES_3KEY` `TDES_2KEY`和 。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Decrypt`，且 KeyUsage 設定為 `TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data decrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --cipher-text 33612AB9D6929C3A828EB6030082B2BD --decryption-attributes 'Symmetric={Mode=CBC}'
```

```
         
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "KeyCheckValue": "71D7AE",
    "PlainText": "31323334313233343132333431323334"
}
```

## 使用 DUKPT 金鑰解密資料
<a name="w2aac15c16c13c11"></a>

**注意**  
 將 decrypt-data 與 DUKPT for P2PE 交易搭配使用時，可能會將信用卡 PAN 和其他持卡人資料傳回至您的應用程式，這些資料在決定其 PCI DSS 範圍時需要考慮。

**Example**  
 在此範例中，我們將使用使用 [CreateKey](create-keys.md) 操作建立或使用 [ImportKey](keys-import.md) 操作匯入的 [DUKPT](terminology.md#terms.dukpt) 金鑰來解密加密文字資料。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `DeriveKey`，且 KeyUsage 設定為 `TR31_B0_BASE_DERIVATION_KEY`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。當您使用 時`DUKPT`，對於`TDES`演算法，加密文字資料長度必須是 16 個位元組的倍數。對於`AES`演算法，加密文字資料長度必須是 32 個位元組的倍數。  

```
$ aws payment-cryptography-data decrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --cipher-text 33612AB9D6929C3A828EB6030082B2BD --decryption-attributes 'Dukpt={KeySerialNumber=FFFF9876543210E00001}'
```

```
         
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
    "KeyCheckValue": "71D7AE",
    "PlainText": "31323334313233343132333431323334"
}
```

## 使用 EMV 衍生對稱金鑰解密資料
<a name="w2aac15c16c13c13"></a>

**Example**  
 在此範例中，我們將使用使用 [CreateKey](create-keys.md) 操作建立或使用 [ImportKey](keys-import.md) 操作匯入的 EMV 衍生對稱金鑰來解密加密文字資料。對於此操作，金鑰必須將 KeyModesOfUse 設定為 `Derive`，且 KeyUsage 設定為 `TR31_E1_EMV_MKEY_CONFIDENTIALITY`或 `TR31_E6_EMV_MKEY_OTHER`。如需詳細資訊，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  

```
$ aws payment-cryptography-data decrypt-data --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi --cipher-text 33612AB9D6929C3A828EB6030082B2BD --decryption-attributes 'Emv={MajorKeyDerivationMode=EMV_OPTION_A,PanSequenceNumber=27,PrimaryAccountNumber=1000000000000432,SessionDerivationData=02BB000000000000, InitializationVector=1500000000000999,Mode=CBC}'
```

```
{
"KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
"KeyCheckValue": "71D7AE",
"PlainText": "31323334313233343132333431323334"
}
```

## 使用 RSA 金鑰解密資料
<a name="crypto-ops.decrypt-rsa"></a>

**Example**  
 在此範例中，我們將使用使用 [CreateKey](create-keys.md) 操作建立的 [RSA 金鑰對](terminology.md#terms.privatekey)來解密加密文字資料。對於此操作，金鑰必須已將 KeyModesOfUse 設定為啟用`Decrypt`，且 KeyUsage 設定為 `TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION`。如需更多選項，請參閱[密碼編譯操作的金鑰](crypto-ops-validkeys-ops.md)。  
 對於目前不支援的 PKCS \$17 或其他填補機制，請省略填補指標 * 'Asymmetric=\$1\$1'*，並在呼叫服務之後移除填補，以選取不填補。  

```
$ aws payment-cryptography-data decrypt-data \ 
        --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/5dza7xqd6soanjtb --cipher-text 8F4C1CAFE7A5DEF9A40BEDE7F2A264635C... \ 
        --decryption-attributes 'Asymmetric={PaddingType=OAEP_SHA256}'
```

```
{
    "KeyArn": "arn:aws:payment-cryptography:us-east-1:111122223333:key/5dza7xqd6soanjtb",
    "KeyCheckValue": "FF9DE9CE",
    "PlainText": "31323334313233343132333431323334"
}
```