Второе шифрование

Итак нам нужно зашифровать запрос.

Ключи необходимые для шифрования запроса: https://nanokassa.ru/integration/documentation/publichnye-rsa-klyuchi/

Итак нам нужно зашифровать вот такой запрос:

{    
    "ab":"GYBhagdYGWgahjGDHASgdjhas...ASDGd",     
    "de":"GYBhagdYGWgahjGDHASgdjhas...ASDGd",     
    "kassaid":"123456",     
    "kassatoken":"3212312312312",
    "check_type":"standart",
    "test":"1"
}

Итак вот этот небольшой запрос после второго шифрования должен превратиться вот в такой небольшой запросик:

{
    "aab":"ASDHGSADHgshadgahsGDHAGD..SADGsg",
    "dde":"ASDHGSADHgshadgahsGDHAGD..SADGsg", 
    "test":"1"
}

Объект test - говорит о тесте или не тесте.

В aab также как и в первом шифровании будет ключ для дешифровки пакета aab. aab зашифрован через RSA.

А в dde также как и в первом шифровании будет сам пакет с данными. dde зашифрован через AES256-CTR.

$request2 = '{
"ab": "GYBhagdYGWgahjGDHASgdjhas...ASDGd", "de": "GYBhagdYGWgahjGDHASgdjhas...ASDGd", "kassaid":"123456", "kassatoken": "3212312312312", "test":"1"
}';
$pw2 = random_bytes(32);
$IVdata2 = random_bytes(16);
$pw2 = random_bytes(32);
$mk2 = 'xxx2'; // hmac контроль в формате base64
$dataAES2 = openssl_encrypt($request2, "aes-256-ctr", $pw2, OPENSSL_RAW_DATA, $IVdata2);
$hmac2 = hash_hmac('sha512', $IVdata2.$dataAES2, base64_decode($mk2), true);
$returnDataDE2 = base64_encode($hmac2.$IVdata2.$dataAES2);

То есть строение пакета dde должно быть таким. 64 байта hmac, 16 байт IVDATA, и остальные байты самого пакета.

Теперь перейдем к пакету aab. 

Вот функции (на php) (с учетом, что установлен openssl), чтобы грамотно вам зашифровать пакеты для первого шифрования. (pubkey показан обобщенно). Для шифрования RSA используется функция openssl_public_encrypt.

$pubkey2 = "-----BEGIN PUBLIC KEY-----
HASGDHJASGDASDSAGD .... SADGHASDHASJGDAHJS==
-----END PUBLIC KEY-----";
openssl_public_encrypt($pw2, $aab_rsa, $pubkey2, OPENSSL_PKCS1_OAEP_PADDING)
$aab = base64_encode ($aab_rsa);
$returnDataAAB = $aab;

Теперь мы можем уже понять, как получить вот такой пакет. 

{
    "aab":"ASDHGSADHgshadgahsGDHAGD..SADGsg",
    "dde":"ASDHGSADHgshadgahsGDHAGD..SADGsg", 
    "test":"1"
}

Перейдем к отправке данных.