

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Gerar deslocamento de IBM3624 pino para um pino
<a name="generate-ibm3624"></a>

 O IBM 3624 PIN Offset às vezes também é chamado de método IBM. Esse método gera um natural/intermediate PIN usando os dados de validação (normalmente o PAN) e uma chave PIN (PVK). Os pinos naturais são efetivamente um valor derivado e, sendo determinísticos, é muito eficiente lidar com um emissor, pois nenhum dado de PIN precisa ser armazenado no nível do titular do cartão. A desvantagem mais óbvia é que esse esquema não considera os pinos selecionáveis ou aleatórios do titular do cartão. Para permitir esses tipos de pinos, um algoritmo de deslocamento foi adicionado ao esquema. O deslocamento representa a diferença entre o pino selecionado pelo usuário (ou aleatório) e a chave natural. O valor da compensação é armazenado pelo emissor ou processador do cartão. No momento da transação, o serviço AWS de criptografia de pagamento recalcula internamente o pino natural e aplica o deslocamento para encontrar o pino. Em seguida, ele compara isso com o valor fornecido pela autorização da transação. 

Existem várias opções para IBM3624:
+ `Ibm3624NaturalPin`produzirá o pino natural e um bloco de pinos criptografado
+ `Ibm3624PinFromOffset`gerará um bloco de pinos criptografado com um deslocamento
+ `Ibm3624RandomPin`gerará um pino aleatório e, em seguida, o deslocamento correspondente e o bloco de pinos criptografado.
+  `Ibm3624PinOffset`gera o deslocamento do pino de acordo com um pino selecionado pelo usuário.

Internamente à criptografia de AWS pagamento, as seguintes etapas são executadas:
+ Preencha o plano fornecido com 16 caracteres. Se <16 for fornecido, pressione no lado direito usando o caractere de preenchimento fornecido.
+ Criptografa os dados de validação usando a chave de geração do PIN.
+ Decimalize os dados criptografados usando a tabela de decimalização. Isso mapeia dígitos hexidecimais para dígitos decimais, por exemplo, 'A' pode ser mapeado para 9 e 1 pode ser mapeado para 1.
+ Obtenha os primeiros 4 dígitos de uma representação hexidecimal da saída. Esse é o pino natural.
+ Se um pino selecionado pelo usuário ou aleatório foi gerado, o módulo subtrai o pino natural com o pino do cliente. O resultado é o deslocamento do pino.

**Topics**
+ [Exemplo: gerar deslocamento de IBM3624 pino para um pino](#generate-ibm3624-random-example)

## Exemplo: gerar deslocamento de IBM3624 pino para um pino
<a name="generate-ibm3624-random-example"></a>

Neste exemplo, geraremos um novo pino (aleatório) onde as saídas serão criptografadas `PIN block` (PinData. PinBlock) e um valor de `IBM3624` deslocamento (pinData.offset). As entradas são `PAN` dados de validação (normalmente o pan), caractere de preenchimento, o`Pin Verification Key`, o `Pin Encryption Key` e o. `PIN block format`

 Esse comando requer que a chave de geração de pinos seja do tipo `TR31_V1_IBM3624_PIN_VERIFICATION_KEY` e a chave de criptografia seja do tipo `TR31_P0_PIN_ENCRYPTION_KEY` 

**Example**  
O exemplo a seguir mostra a geração de um pino aleatório e, em seguida, a saída do bloco de pinos criptografados e do valor de IBM3624 deslocamento usando Ibm3624. RandomPin   

```
$ aws payment-cryptography-data generate-pin-data --generation-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/37y2tsl45p5zjbh2 --encryption-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt --primary-account-number 171234567890123 --pin-block-format ISO_FORMAT_0 --generation-attributes Ibm3624RandomPin="{DecimalizationTable=9876543210654321,PinValidationDataPadCharacter=D,PinValidationData=171234567890123}"
```

```
{
              "GenerationKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/37y2tsl45p5zjbh2",
              "GenerationKeyCheckValue": "7F2363",
              "EncryptionKeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ivi5ksfsuplneuyt",
              "EncryptionKeyCheckValue": "7CC9E2",
              "EncryptedPinBlock": "AC17DC148BDA645E",
              "PinData": {
                  "PinOffset": "5507"
              }
          }
```