firmwire titkosítása

#beleértve
#beleértve
#befoglalni
#beleértve

// Titkosítja az "arg1" bemeneti fájl tartalmát, és a titkosított tartalmat az "arg2" kimeneti fájlba írja.
// A titkosítás az AES-256-CBC használatával, az „arg3” jelmondatból származó sózott kulccsal történik.
// Siker esetén 1-et, kudarc esetén 0-t ad vissza.
int32_t saltedEncrypt(char* arg1, char* arg2, char* arg3) {
FILE *inputFile = fopen(arg1, "rb");
if (inputFile == NULL) {
puts("Nem sikerült megnyitni a bemeneti fájlt");
0 vissza;
}

FILE *outputFile = fopen(arg2, "wb");
if (outputFile == NULL) {
puts("Nem sikerült létrehozni a kimeneti fájlt");
fclose(inputFile);
0 vissza;
}

const EVP_CIPHER *cipherType = EVP_aes_256_cbc();
előjel nélküli szénsó[8];
if (RAND_bytes(salt, sizeof(salt)) != 1) { // Véletlenszerű só generálása.
puts("Nem sikerült sót generálni");
fclose(inputFile);
fclose(outputFile);
0 vissza;
}

// A "Salted__" mágikus karakterlánc és a só beírása a kimeneti fájlba.
fwrite("Sózott__", 1, 8, kimeneti fájl);
fwrite(salt, 1, sizeof(salt), outputFile);

előjel nélküli karakterkulcs[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH];
// Vezesse le a kulcsot és az IV-t a jelszóból és sóból az SHA-256 használatával.
if (!EVP_BytesToKey(cipherType, EVP_sha256(), só, (előjel nélküli karakter*)arg3, strlen(arg3), 1, kulcs, iv)) {
puts("Nem sikerült előállítani a kulcsot");
fclose(inputFile);
fclose(outputFile);
0 vissza;
}

EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_új();
if (ctx == NULL || EVP_EncryptInit_ex(ctx, cipherType, NULL, kulcs, iv) != 1) {
puts("A titkosítás inicializálása nem sikerült");
EVP_CIPHER_CTX_free(ctx);
fclose(inputFile);
fclose(outputFile);
0 vissza;
}

unsigned 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(); // Határozza meg a hibakezelési funkciót.
// Kilépés vagy megtisztítás az erőforrásokból.
}
fwrite(outBuf, 1, outLen, outputFile);
}

if (EVP_EncryptFinal_ex(ctx, outBuf, &outLen) != 1) {
handleErrors(); // Megfelelően kezelje a hibákat.
// Kilépés vagy megtisztítás az erőforrásokból.
}
fwrite(outBuf, 1, outLen, outputFile);

EVP_CIPHER_CTX_free(ctx);
fclose(inputFile);
fclose(outputFile);

visszatérés 1; // Siker.
}

Kapcsolatfelvételi űrlap