Невозможно расшифровать ответ сервера WhatsApp FlowsC#

Место общения программистов C#
Ответить
Anonymous
 Невозможно расшифровать ответ сервера WhatsApp Flows

Сообщение Anonymous »

Я работаю над расшифровкой данных потока WhatsApp с использованием шифрования AES-GCM на C#, но столкнулся с проблемой при попытке расшифровать данные потока. Ниже приведен мой класс Decryptor, который обрабатывает как расшифровку ключа AES, так и потоковые данные:
public class Decryptor
{
public static DecryptedRequest DecryptRequest(EncryptedRequest body, string privatePem, string passphrase)
{
Log.Information("Decrypting request with body: {Bodyinitial_vector}", body.initial_vector);

byte[] encryptedAesKey = Convert.FromBase64String(body?.encrypted_aes_key);
byte[] encryptedFlowData = Convert.FromBase64String(body?.encrypted_flow_data);
byte[] initialVector = Convert.FromBase64String(body?.initial_vector);

byte[] decryptedAesKey;
try
{
// Decrypt AES key using private key
using (var rsa = CreateRsaPrivateKey(privatePem, passphrase))
{
decryptedAesKey = rsa.Decrypt(encryptedAesKey, RSAEncryptionPadding.OaepSHA256);
Log.Information("Decrypted AES Key: {decryptedAesKey}", decryptedAesKey);
}
}
catch (Exception ex)
{
throw new FlowEndpointException(421, "Failed to decrypt the request. Please verify your private key.");
}

const int TAG_LENGTH = 16;
byte[] flowDataBuffer = encryptedFlowData;
byte[] initialVectorBuffer = initialVector;
byte[] encryptedFlowDataBody = flowDataBuffer[..^TAG_LENGTH];
byte[] encryptedFlowDataTag = flowDataBuffer[^TAG_LENGTH..];

byte[] decryptedData;
try
{
using (var aesGcm = new AesGcm(decryptedAesKey))
{
decryptedData = new byte[encryptedFlowDataBody.Length];
aesGcm.Decrypt(initialVectorBuffer, encryptedFlowDataBody, decryptedData, encryptedFlowDataTag);
}
}
catch (CryptographicException ex)
{
Log.Error("Decryption failed: {ErrorMessage}", ex.Message);
throw new FlowEndpointException(400, "Failed to decrypt the request.");
}

string decryptedJSONString = Encoding.UTF8.GetString(decryptedData);
return new DecryptedRequest
{
DecryptedBody = decryptedJSONString,
AesKeyBuffer = decryptedAesKey,
InitialVectorBuffer = initialVectorBuffer
};
}
}

Дешифрование завершается неудачей в следующем месте:
using (var aesGcm = new AesGcm(decryptedAesKey))
{
decryptedData = new byte[encryptedFlowDataBody.Length];
aesGcm.Decrypt(initialVectorBuffer, encryptedFlowDataBody, decryptedData, encryptedFlowDataTag);
}

Я получаю сообщение об ошибке:

System.ArgumentException: указанный nonce не является допустимым размером для этого алгоритм. (Параметр nonce)

Эта ошибка предполагает, что начальный вектор (nonce) передается для расшифровки AES-GCM. имеет недопустимый размер. Однако я подтвердил, что начальный вектор правильно декодируется в формате Base64 и передается, как ожидалось.
Кто-нибудь сталкивался с подобной проблемой с AES-GCM< /code> расшифровка на C#? В чем может быть причина неправильного размера nonce и как это устранить?
Я пытался расшифровать это
{
"encrypted_flow_data": "33oaKOMa2tsRCuh7g6JNsFzVB5icbm4dLq3sgrRXImxChcGOKWaTEZycsv/Tgg/jB/7cxQWH9D8HvJFkCc78X/avxOtEj0KbF+TuFKG28xO/HMR3A4rpzSyD37UAJy3eSmQ5CHZV7NOOMteJQNAOZQ3YEpcG/BcH8mo2iOQa2EA/8g==",
"encrypted_aes_key": "NQBgEO5GMMXVHsRx0oDb+0MeTYPnHDZM2yJBG0CeaJ2VqN9ennPnLKknbVgpfRm7GfGSxsPHvO9sZeNs/SXlmYIoasDXw3pgKVjhPq3BOk93Fkfjs8bwBhDP763RCgO5IsOSgCqvNeGxeXxyM2BLr8rUAwoE74FYRLa6dxg5RGEUpGJjKLU8VZmBDbXanhPmy6+iVcLEE79rZLsA0+kU7IZ44eeR7PpvqiDCcrnjME/uCF24+3g+iVjsgcL5lA5DdhUQnfPnkjLTiC+x/NPp7ev3e7nP+PzTLQOxnnihjggRfYHUzklp9laVLAQoSQh7vvyKJUPyCv9BRhEmR7BJVQ==",
"initial_vector": "Vs37z73b5OiBJ5hMV0kyUQ=="
}

и это то, что я ожидаю, по крайней мере.
Расшифрованный запрос:
{
"data": {
"farmer_select": "1"
},
"flow_token": "TEST",
"screen": "DEMO_SCREEN",
"action": "data_exchange",
"version": "3.0"
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... r-response
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»