wcstombs не занимается выделением памяти,
Там же написано, что набор символов во время выполнения программы -- implementation defined, поэтому нет гарантии, что их можно обработать кросплатформенно.
Т.е. исходные данные в любом формате можно зашифровать, а потом расшифровать обратно. Поэтому имеет смысл отделить преобразование форматов входных данных от шифрования/расшифровки.
то твой код интерпретирует строку char как строку wchar_t, что добавляет хаоса
C:\Users\Alex\Documents\cpp\alphacrypt>acp.exe -i """Hello world!""" -k mysecretpass
s3Q3f5crD7zwY#25484#5
я очень хотел бы узнать, как оно у тебя собирается
gcc main.c acp.c md5.c -o main
Кроме того, ты используешь функцию itoa, но это нестандартная функция, в стандартную библиотеку C она не входит.
при этом нет ни одного файла *.cpp, я очень хотел бы узнать, как оно у тебя собирается
& 'c:\Users\Alex\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-jcy0pkn1.aoz' '--stdout=Microsoft-MIEngine-Out-hsfqfz5g.clb' '--stderr=Microsoft-MIEngine-Error-mnxcifzi.5or' '--pid=Microsoft-MIEngine-Pid-mxlmcoo1.oxa' '--dbgExe=E:\msys64\ucrt64\bin\gdb.exe' '--interpreter=mi'
key_cache[i].strong_value[round * 2] = (char*) calloc(128, 1);
memcpy(key_cache[i].strong_value[round * 2], value[0], strlen(value[1]));
key_cache[i].strong_value[round * 2 + 1] = (char*) malloc(strlen(value[1])+1);
strcpy(key_cache[i].strong_value[round * 2 + 1], value[1]);