kryptering af firmwire

#omfatte
#omfatte
#omfatte
#omfatte

// Krypterer indholdet af inputfilen `arg1` og skriver det krypterede indhold til outputfilen `arg2`.
// Krypteringen udføres ved hjælp af AES-256-CBC med en saltet nøgle afledt af adgangssætningen `arg3`.
// Returnerer 1 ved succes og 0 ved fiasko.
int32_t saltedEncrypt(char* arg1, char* arg2, char* arg3) {
FIL *inputFile = fopen(arg1, "rb");
if (inputFile == NULL) {
puts("Kunne ikke åbne inputfil");
0 vende tilbage;
}

FIL *outputFile = fopen(arg2, "wb");
if (outputFile == NULL) {
puts("Kunnede ikke oprette outputfil");
fclose(inputFil);
0 vende tilbage;
}

const EVP_CIPHER *cipherType = EVP_aes_256_cbc();
usigneret træsalt[8];
if (RAND_bytes(salt, sizeof(salt)) != 1) { // Generer et tilfældigt salt.
puts("Kunnede ikke generere salt");
fclose(inputFil);
fclose(outputfil);
0 vende tilbage;
}

// Skrivning af "Salted__" magiske streng og salt til outputfilen.
fwrite("Saltet__", 1, 8, outputfil);
fwrite(salt, 1, størrelse på(salt), outputFile);

usigneret tegnnøgle[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH];
// Udled nøglen og IV fra adgangssætningen og saltet ved hjælp af SHA-256.
if (!EVP_BytesToKey(cipherType, EVP_sha256(), salt, (usigned char*)arg3, strlen(arg3), 1, key, iv)) {
puts("Kunnede ikke generere nøgle");
fclose(inputFil);
fclose(outputfil);
0 vende tilbage;
}

EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
if (ctx == NULL || EVP_EncryptInit_ex(ctx, cipherType, NULL, key, iv) != 1) {
puts("Initialisering af kryptering mislykkedes");
EVP_CIPHER_CTX_free(ctx);
fclose(inputFil);
fclose(outputfil);
0 vende tilbage;
}

usigneret char inBuf[1024], outBuf[1024 + EVP_MAX_BLOCK_LENGTH];
int inLen, outLen;
while ((inLen = fread(inBuf, 1, sizeof(inBuf), inputFile)) > 0) {
if (EVP_EncryptUpdate(ctx, outBuf, &outLen, inBuf, inLen) != 1) {
handleErrors(); // Definer din fejlhåndteringsfunktion.
// Afslut eller opryd ressourcer.
}
fwrite(outBuf, 1, outLen, outputFile);
}

if (EVP_EncryptFinal_ex(ctx, outBuf, &outLen) != 1) {
handleErrors(); // Håndter fejl korrekt.
// Afslut eller opryd ressourcer.
}
fwrite(outBuf, 1, outLen, outputFile);

EVP_CIPHER_CTX_free(ctx);
fclose(inputFil);
fclose(outputfil);

retur 1; // Succes.
}

Kontaktformular