openssl rc4命令行加密与实现rc4的cpp文件之间的区别

时间:2019-04-11 01:02:05

标签: c++ linux openssl rc4-cipher

我正在尝试使用我用openssl / rc4标头编写的cpp文件通过RC4加密文本文件,然后通过命令行解密以表明我的实现是正确的。

该文件的终端命令在下面,而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;
}

1 个答案:

答案 0 :(得分:1)

因此,这是您的代码版本,其中添加了许多错误检查,已修复的错误,奇怪的东西(仅在读或写时将O(1)O_RDWR一起使用?{{1} }?open()?),然后像pread()的{​​{1}}选项一样使用pwrite()使用(那是关键(heh)因素):

EVP_BytesToKey()

演示:

-k