szyfrowanie oprogramowania sprzętowego

#włączać
#włączać
#włączać
#włączać

// Szyfruje zawartość pliku wejściowego „arg1” i zapisuje zaszyfrowaną zawartość do pliku wyjściowego „arg2”.
// Szyfrowanie odbywa się przy użyciu protokołu AES-256-CBC z solonym kluczem pochodzącym z hasła „arg3”.
// Zwraca 1 w przypadku sukcesu i 0 w przypadku niepowodzenia.
int32_t saltedEncrypt(char* arg1, char* arg2, char* arg3) {
PLIK *plik wejściowy = fopen(arg1, "rb");
if (plik wejściowy == NULL) {
puts("Nie udało się otworzyć pliku wejściowego");
0 wrócić;
}

PLIK *plik wyjściowy = fopen(arg2, "wb");
if (plik wyjściowy == NULL) {
puts("Nie udało się utworzyć pliku wyjściowego");
fclose(plik wejściowy);
0 wrócić;
}

const EVP_CIPHER *cipherType = EVP_aes_256_cbc();
nieoznaczona sól karbonizacyjna [8];
if (RAND_bytes(salt, sizeof(salt)) != 1) { // Wygeneruj losową sól.
puts("Nie udało się wygenerować soli");
fclose(plik wejściowy);
fclose(plik wyjściowy);
0 wrócić;
}

// Zapisanie magicznego ciągu „Salted__” i soli do pliku wyjściowego.
fwrite("Salted__", 1, 8, plik wyjściowy);
fwrite(sól, 1, rozmiar(sól), plik wyjściowy);

klucz znaku bez znaku [EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH];
// Uzyskaj klucz i IV z hasła i soli, używając SHA-256.
if (!EVP_BytesToKey(cipherType, EVP_sha256(), sól, (unsigned char*)arg3, strlen(arg3), 1, klucz, iv)) {
puts("Nie udało się wygenerować klucza");
fclose(plik wejściowy);
fclose(plik wyjściowy);
0 wrócić;
}

EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
if (ctx == NULL || EVP_EncryptInit_ex(ctx, cipherType, NULL, klucz, iv) != 1) {
puts("Inicjalizacja szyfrowania nie powiodła się");
EVP_CIPHER_CTX_free(ctx);
fclose(plik wejściowy);
fclose(plik wyjściowy);
0 wrócić;
}

unsigned char inBuf[1024], outBuf[1024 + EVP_MAX_BLOCK_LENGTH];
int inLen, outLen;
while ((inLen = fread(inBuf, 1, sizeof(inBuf), plik wejściowy)) > 0) {
if (EVP_EncryptUpdate(ctx, outBuf, &outLen, inBuf, inLen) != 1) {
uchwytBłędy(); // Zdefiniuj funkcję obsługi błędów.
// Wyjdź lub wyczyść zasoby.
}
fwrite(outBuf, 1, outLen, plik wyjściowy);
}

if (EVP_EncryptFinal_ex(ctx, outBuf, &outLen) != 1) {
uchwytBłędy(); // Odpowiednia obsługa błędów.
// Wyjdź lub wyczyść zasoby.
}
fwrite(outBuf, 1, outLen, plik wyjściowy);

EVP_CIPHER_CTX_free(ctx);
fclose(plik wejściowy);
fclose(plik wyjściowy);

zwróć 1; // Powodzenie.
}

Formularz kontaktowy