【发布时间】:2011-12-05 08:25:15
【问题描述】:
我的函数中有一个字符串,定义为 ..
char *key="anyvalue";
现在我使用 linux 命令作为 ...
$openssl dgst -md5 -hmac "anyvalue" file.txt
现在的问题是我需要通过 C 函数执行以下任务..
这里是代码...
void func (char *key) {
char *key_new=key;
system("openssl -dgst md5 -hmac <got stuck here> file.txt");
}
如何将键值传递给标记的部分??
我在 php.ini 中非常简单地做到了这一点。 ...
$key="somevalue"
exec("openssl -dgst md5 -hmac $key file.txt");
C 中有类似的东西吗???
如果没有那么请告诉我任何其他可能的方式???
限制:
密钥必须通过函数传递。
我不能把它当作 C 命令行参数。
编辑:
我试过这个......但首先我想提一下,它是一个大项目中的一个小文件,并且警告被视为错误......所以我也需要照顾它们
这就是我所做的 -
char *sstring=NULL;
sprintf(sstring, "openssl dgst -md5 -hmac \"%s\"
-out data3.md5 data3.txt",(char *)key);
system(sstring);
如果我不初始化,那么这里会出现警告..
gcc -o hmacmd5.so -I.. -fPIC -fsigned-char -pipe -Wall
-Wpointer-arith -Wwrite-strings -Wstrict-prototypes -Wnested-externs
-Winline -Werror -g -Wcast-align -DSENDIP_LIBS=\"/usr/local/lib/sendip\"
-shared hmacmd5.c ../libsendipaux.a ../libsendipaux.a
cc1: warnings being treated as errors
hmacmd5.c: In function ‘xoricv’:
hmacmd5.c:271:9: error: ‘sstring’ is used uninitialized in this function
make: *** [hmacmd5.so] Error 1
【问题讨论】:
-
如果在程序输入中提供了
key的值,您可能会面临安全漏洞。考虑一下:如果key是abcdef$(rm -f /etc/passwd)ghijkl怎么办?
标签: c pointers exec command-line-arguments