我要做的是使用C编程来调用OpenSSL来加密和解密敏感数据。到目前为止我一直在使用包含密钥和数据的文件。但我认为,文件是潜在的安全问题,我想避免这种情况。
openssl rsautl -encrypt -inkey publicKey.pem -pubin -in data.txt -out enc.txt
openssl rsautl -decrypt -inkey privateKey.pem -in enc.txt -out decrypt.txt
这些是RSA加密/解密文件的常用命令。我们假设data.txt
包含以下文字:
Hello World
是否直接将字符串 Hello World
传递给命令行而不是使用文件?
openssl rsautl -encrypt -inkey publicKey.pem -pubin "Hello World" -out enc.txt
这将在C中使用,如下所示:
char cmd[200] = "";
char data [50] = " \"Hello World\" ";
strcpy(cmd, CMD_ACCESS_OPENSSL); // path to access utility
strcat(cmd, "rsautl -encrypt -inkey publicKey.pem -pubin");
strcat(cmd, data);
strcat(cmd, "-out enc.txt");
if (system(cmd) != 0)
exit 1; // If failed exit
答案 0 :(得分:1)
使用openssl命令行工具,您可以通过省略-in
- 参数来提供要在stdin上加密的数据,即:
echo -n "Hello World" | openssl rsautl -encrypt -inkey publicKey.pem -pubin -out enc.txt
将其嵌入C代码有点繁琐,因为你必须创建一个管道并写入它(未经测试!):
char cmd[200] = "";
strcpy(cmd, CMD_ACCESS_OPENSSL); // path to access utility
strcat(cmd, "rsautl -encrypt -inkey publicKey.pem -pubin ");
strcat(cmd, "-out enc.txt");
FILE *p = popen(cmd, "w");
if (p != NULL) {
fprintf(p, "Hello World!");
pclose(p);
} else {
perror("popen");
exit(EXIT_FAILURE);
}
但更简洁的C方法是使用openssl c api加密数据,请访问OpenSSL wiki开始。