Я работаю над попыткой зашифровать текстовый файл через RC4 с помощью файла cpp, который я написал с заголовками openssl / rc4, а затем расшифровать с помощью командной строки, чтобы показать, что моя реализация верна.
MyКоманда терминала для файла приведена ниже, а файл cpp - под ним вместе с командой компиляции терминала, которую я использовал для нее.
Едва ли есть какая-либо информация об этом где-либо онлайн, за пределами какого-то расплывчатого youtubeвидео, которые объясняют, как работает шифр RC4 (который я уже знаю).Я не могу найти что-либо на страницах руководства, чтобы объяснить детали реализации openssl.
Любые указатели на то, почему мой файл cpp не расшифровывается до исходного содержимого, будут очень благодарны.Я рву свои волосы здесь, пытаясь понять это.Заранее спасибо.
(и да, я понимаю, что есть уязвимости, которые делают RC4 менее подходящим вариантом, но сейчас я просто хочу понять, как они работают)
шифрование командной строки:
openssl rc4-40 -k PASSword123 -in /home/chris/Desktop/test.txt -out /home/chris/Desktop/ssloutput.txt -p -nosalt
cpp файл:
g++ rc4.cpp -o rc4 -lssl -lcrypto
cpp файл:
#include <openssl/rc4.h>
#include <string>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int fd = open("/home/chris/Desktop/ssloutput.txt", O_RDWR);
unsigned char keygen[12] = "PASSword123";
RC4_KEY key;
struct stat st;
fstat(fd, &st);
int size = st.st_size;
unsigned char* fileIn;
fileIn = (unsigned char*) calloc(size, sizeof(char));
pread(fd, fileIn, size, 0);
unsigned char *fileOut = (unsigned char*)malloc(size);
RC4_set_key(&key, 16, keygen);
RC4(&key, size, fileIn, fileOut);
close(fd);
int fd2 = open("/home/chris/Desktop/rc4output.txt", O_RDWR | O_CREAT);
pwrite(fd2, fileOut, size, 0);
close(fd2);
free(fileIn);
free(fileOut);
return 0;
}