首页 > 解决方案 > 用c系统函数执行openssl命令和在终端执行openssl命令输出不同

问题描述

我正在使用 MacOS/10.13

我在终端上的代码:

echo -n this | openssl enc -aes-128-cbc -K 0 -iv 0 -base64

c代码:

int main(){
   system("echo -n this | openssl enc -aes-128-cbc -K 0 -iv 0 -base64");
}

运行截图

在此处输入图像描述

在此处输入图像描述

标签: copenssl

解决方案


echo命令的问题是它的行为不能在不同的 shell 或环境之间移植。最好改为使用printf,它是便携式的。在您的情况下,将echo -n语句替换为printf,得到以下代码:

#include <stdlib.h>
int main() {
    system("printf this | openssl enc -aes-128-cbc -K 0 -iv 0 -base64");
}

构建和运行:

$ gcc test.c -o test
$ ./test
gc8X3os/mFxDE73AebmweQ==

如预期的。


推荐阅读