170 похожих чатов

#Include <tuple> #include <vector> #include <list> #include <string> #include <iostream> #include <random> #include <Windows.h> #pragma comment

(lib, "crypt32")

#include <openssl/evp.h>
#include <openssl/aes.h>
#include <openssl/rand.h>

const size_t kKeyLength = 32;
const size_t kNonceLength = 12;

std::vector<BYTE> decrypt_value(std::vector<BYTE> ciphertext, std::vector<BYTE> key)
{
BYTE tag[AES_BLOCK_SIZE];
BYTE nonce[kNonceLength];
std::copy(ciphertext.begin(), ciphertext.begin() + 12, nonce);
std::copy(ciphertext.end() - 16, ciphertext.end(), tag);
std::vector<BYTE> plaintext;
plaintext.resize(ciphertext.size(), '\0');
int actual_size = 0, final_size = 0;
EVP_CIPHER_CTX* d_ctx = EVP_CIPHER_CTX_new();
auto a = EVP_DecryptInit(d_ctx, EVP_aes_256_gcm(), key.data(), nonce);
auto b = EVP_DecryptUpdate(d_ctx, &plaintext[0], &actual_size, &ciphertext[kNonceLength], ciphertext.size() - sizeof(tag) - sizeof(nonce));
auto c = EVP_CIPHER_CTX_ctrl(d_ctx, EVP_CTRL_GCM_SET_TAG, 16, tag);
if (!EVP_DecryptFinal(d_ctx, &plaintext[actual_size], &final_size)) { return std::vector<BYTE>(); }
EVP_CIPHER_CTX_free(d_ctx);
plaintext.resize(actual_size + final_size, '\0');
return plaintext;
}

std::vector<BYTE> encrypt_value(std::vector<BYTE> input, std::vector<BYTE> key) {
BYTE tag[AES_BLOCK_SIZE];
BYTE nonce[kNonceLength];
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dis(0, 255);
for (size_t i = 0; i < kNonceLength; ++i) {
nonce[i] = dis(gen);
}
std::vector<BYTE> plaintext;
plaintext.resize(41);
int actual_size = 0, final_size = 0;
EVP_CIPHER_CTX* ctx = EVP_CIPHER_CTX_new();
auto a = EVP_EncryptInit(ctx, EVP_aes_256_gcm(), key.data(), nonce);
auto b = EVP_EncryptUpdate(ctx, &plaintext[0], &actual_size, input.data(), input.size());
EVP_EncryptFinal(ctx, plaintext.data() + actual_size, &final_size);
EVP_CIPHER_CTX_free(ctx);
plaintext.resize(actual_size + final_size);
return plaintext;

}

int main(int argc, char** argv)
{
std::vector<BYTE> crypted = {
150, 20, 32, 125, 108, 253, 9, 175, 62, 74, 91, 237,
130, 7, 222, 87, 106, 74, 172, 219, 152, 226, 140,
137, 174, 247, 103, 64, 187, 60, 16, 232, 208, 34, 20,
194, 223, 195, 146, 24, 1};

std::vector<BYTE> key = {
9, 23, 177, 38, 212, 171, 87, 115, 170, 123, 227,
198, 99, 223, 196, 178, 41, 232, 200, 80, 89, 211,
31, 106, 49, 195, 52, 10, 11, 189, 146, 144
};

std::cout << "Key " << key.size() << ": " << key.data() << std::endl << "-----------" << std::endl;
std::cout << "Crypted " << crypted.size() << ": " << crypted.data() << std::endl;

std::vector<BYTE> decrypted = decrypt_value(crypted, key);
std::cout << "Decrypted " << decrypted.size() << ": " << decrypted.data() << std::endl;

std::vector<BYTE> encrypted = encrypt_value(decrypted, key);
std::cout << "Encrypted " << encrypted.size() << ": " << encrypted.data() << std::endl;

// Ошибка если снова попробовать расшифровать, видимо из-за размера
std::vector<BYTE> cryptcheck = decrypt_value(encrypted, key);
std::cout << "Check " << cryptcheck.size() << ": " << cryptcheck.data() << std::endl;

return 0;
}

Приветствую! Подскажите, пожалуйста, что я делаю неправильно. Пытаюсь расшифровать значение с ключом AES.
Расшифровывается успешно - получаю нормальное значение на выходе.
Зашифровываю обратно и длинна шифрованного значения должна меняться, но она остается такая как в расшифрованном значении.

Что я делаю не так? Спасибо.

5 ответов

17 просмотров

https://imgur.com/a/ZLuo1PM

Ivan
https://imgur.com/a/ZLuo1PM

По идее должно Encrypted должно быть снова 41, но оно остается таким же как и расшифрованное значение.

Есть ли отдельный чат по шифрованию какой-то? Спасибо

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта