Programa para cifrar archivo de texto

(1/3) > >>

doitunkboo:
Hola, estoy tratando de compilar este código y DEV-C++ me tira el error:
7 [Warning] 'int AES_set_encrypt_key(const unsigned char*, int, AES_KEY*)' is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]

Como lo arreglo? porque no me lo compila:
Código:

#include <openssl/aes.h>
#include <stdio.h>
#include <string.h>

void encrypt_AES(const unsigned char *plaintext, int plaintext_len, const unsigned char *key, unsigned char *ciphertext) {
    AES_KEY aes_key;
    AES_set_encrypt_key(key, 128, &aes_key);
    AES_encrypt(plaintext, ciphertext, &aes_key);
}

int main() {
const char *filename = "archivo.txt";
    const unsigned char key[] = "clave secreta";
    const int block_size = 12;
    unsigned char plaintext[block_size];
    unsigned char ciphertext[block_size];

    // Leer el archivo de texto
    FILE *file = fopen(filename, "rb");
    if (file == NULL) {
        printf("Error al abrir el archivo.\n");
        return 1;
    }
    fread(plaintext, block_size, 1, file);
    fclose(file);

    // Cifrar el archivo de texto
    encrypt_AES(plaintext, block_size, key, ciphertext);

    // Escribir el archivo cifrado
    FILE *output_file = fopen("archivo_cifrado.txt", "wb");
    if (output_file == NULL) {
        printf("Error al crear el archivo cifrado.\n");
        return 1;
    }
    fwrite(ciphertext, block_size, 1, output_file);
    fclose(output_file);

    printf("Archivo cifrado exitosamente.\n");
    return 0;
}

RayR:
Pues es justo lo que el warning te dice: la función AES_set_encrypt_key está en proceso de obsolescencia y se desaconseja su uso. Lo correcto sería que busques cuál función la sustituye en OpenSSL 3.0 y la uses en su lugar. O si no quieres hacer eso, podrías simplemente desactivar esa advertencia con la opción: -Wno-deprecated-declarations.

doitunkboo:
Cita de: RayR en  6 Mayo 2023, 18:54 pm

Pues es justo lo que el warning te dice: la función AES_set_encrypt_key está en proceso de obsolescencia y se desaconseja su uso. Lo correcto sería que busques cuál función la sustituye en OpenSSL 3.0 y la uses en su lugar. O si no quieres hacer eso, podrías simplemente desactivar esa advertencia con la opción: -Wno-deprecated-declarations.


Entiendo, gracias por la ayuda.

doitunkboo:
Pues tampoco funciona y sigue tirando el error
Código:

# Project: Encriptador
# Makefile created by Embarcadero Dev-C++ 6.3

CPP      = g++.exe
CC       = gcc.exe
WINDRES  = windres.exe
OBJ      = main.o
LINKOBJ  = main.o
LIBS     = -L"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/lib" -L"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/x86_64-w64-mingw32/lib" -static-libgcc -L"C:/Program Files/OpenSSL-Win64/lib" -mwindows
INCS     = -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/9.2.0/include" -I"C:/Program Files/OpenSSL-Win64/include"
CXXINCS  = -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/x86_64-w64-mingw32/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/9.2.0/include" -I"C:/Program Files (x86)/Embarcadero/Dev-Cpp/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/9.2.0/include/c++" -I"C:/Program Files/OpenSSL-Win64/include"
BIN      = Encriptador.exe
CXXFLAGS = $(CXXINCS) -lssl -lcrypto
CFLAGS   = $(INCS)
DEL      = C:\Program Files (x86)\Embarcadero\Dev-Cpp\devcpp.exe INTERNAL_DEL

.PHONY: all all-before all-after clean clean-custom

all: all-before $(BIN) all-after

clean: clean-custom
${DEL} $(OBJ) $(BIN)

$(BIN): $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

main.o: main.cpp
$(CPP) -c main.cpp -o main.o $(CXXFLAGS)

Código:

C:\Program Files (x86)\Embarcadero\Dev-Cpp\TDM-GCC-64\x86_64-w64-mingw32\bin\ld.exe main.o:main.cpp:(.text+0x4a): undefined reference to `AES_set_encrypt_key'
C:\Program Files (x86)\Embarcadero\Dev-Cpp\TDM-GCC-64\x86_64-w64-mingw32\bin\ld.exe main.o:main.cpp:(.text+0x67): undefined reference to `AES_encrypt'
C:\Users\xxxxxx\Documents\Dev-C\Encriptador\collect2.exe [Error] ld returned 1 exit status
25 C:\Users\xxxxxx\Documents\Dev-C\Encriptador\Makefile.win recipe for target 'Encriptador.exe' failed

Dice que esas referencias no están definidas pero si lo están, alguien me puede explicar donde está el problema? Gracias

RayR:
Bueno, eso es otro problema distinto. Se trata de un error de enlazado. Hay varias razones para que se produzca el error de referencias no definidas, la más común es que el enlazador no encuentre las bibliotecas/librerías donde se definen esas funciones. En tu makefile incluyes la ruta "C:/Program Files/OpenSSL-Win64/lib", ¿estás seguro de que los archivos .a correspondientes (en este caso, libssl y libcrypto) se encuentran exactamente en ese directorio?  Porque es algo común que las bibliotecas open source creen subdirectorios para cada compilador. Yo lo primero que haría sería verifica que el directorior sea el correcto.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente