Второе шифрование
Итак нам нужно зашифровать запрос.
Ключи необходимые для шифрования запроса: 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" }
Перейдем к отправке данных.