c - 用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");
}
运行截图
解决方案
该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==
如预期的。
推荐阅读
- java - AWS SAM 无法访问在 Github 包上发布的 Maven 包
- java - 如何使用 Jetty 客户端根据请求获取 bytesIn/bytesOut
- aws-lambda - AWS Cognito Pre-Token Generation 不向 ID 令牌添加自定义声明(使用 ALB 设置 + Auth 代码流)
- treesitter - tree-sitter 测试文件语法与编程语言语法冲突
- python - PyLogit 数据框格式和条件 Logit 预测
- pandas - 如何根据单元格位置设置背景颜色?
- sql - SQL窗口函数被分组,但仍然得到“必须是聚合表达式或出现在GROUP BY子句中”
- c# - 实体框架 - 禁用模型兼容性检查,同时还允许自动升级
- c# - C# 图形 DrawLine 删除
- javascript - 更新 DataTable 中的嵌套 JSON 数据