OpenSSL C++RSA符号与命令行符号不同
OpenSSL C++ RSA sign is different from command line sign
我正在尝试用C++对文本进行签名,然后在命令行中进行验证。我正在使用OpenSSL库。这是我生成密钥的命令行:
openssl genrsa -out key.pem 1024
现在我有了私人钥匙。然后这就是我如何登录命令行:
echo "hola" | openssl rsautl -pkcs -sign -inkey key.pem > sign.txt
在这一点上,所有的工作似乎是这样的,现在我在sign.txt中有一个签名。现在我正试图在C中做同样的事情…这是我的代码:
RSA * rsaPrivKey;
RSA * createRSAWithFilename (const char * filename, int publicKey)
{
FILE * fp = fopen (filename, "rb");
if (fp == NULL)
{
printf ("Unable to open file %s n", filename);
return NULL;
}
RSA *rsa = RSA_new ();
if (publicKey)
rsa = PEM_read_RSA_PUBKEY (fp, &rsa, NULL, NULL);
else
rsa = PEM_read_RSAPrivateKey (fp, &rsa, NULL, NULL);
return rsa;
}
void initRSA (void)
{
rsaPrivKey = createRSAWithFilename ("key.pem", 0);
unsigned char text[] = {"hola"};
unsigned char encrypted[4098] = {};
unsigned int outlen;
unsigned char hash[20];
if (!SHA1 (text, sizeof(text), hash)){
printf ("SHA1 failedn");
exit (0);
}
if (!RSA_sign (NID_sha1, hash, 20, encrypted, &outlen, rsaPrivKey)){
printf ("RSA_sign failedn");
exit (0);
}
printf ("Result:n");
for (int a = 0; a < outlen; a++)
printf ("%c", encrypted[a]);
exit (1);
}
当我调用initRSA()时,它会打印生成的签名。。但是与在命令行中生成的不同。
因为不确定sizeof是否取"text"的实际长度,我尝试了length=4(hola有4个字符)和5(可能是在计算\0),结果不是预期的。
我的密码学知识非常有限。。不知道问题出在哪里。
显然是因为您使用了错误的命令行。您需要这个命令行,它计算输入的摘要并使用私钥进行签名:
echo -n "hola" | openssl dgst -sha1 -binary -sign key.pem >sign.txt
使用pkeyutl可以做一些其他额外的事情,如下所述:使用C例程和openssl-dgst时的不同签名,rsoutl命令
因此,如果您使用我提供的命令行(使用echo -n
以避免添加新行),并将代码更改为sizeof(text)-1
以跳过null终止符,则应该会得到相同的输出。
相关文章:
- 从命令行c++发送文本文件名
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 数组长度,为什么从命令行获取时不能使用它?
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 添加符号 libgtest.so 错误:命令行中缺少 DSO
- libstdc++.so.6:添加符号时出错:命令行中缺少 DSO
- C 实现CNN错误添加符号:命令行中缺少DSO
- libopencv_core.so.2.4:错误添加符号:命令行中缺少DSO
- 如何在 Visual Studio 2015 调试中将'%'符号作为命令行参数 (argv) 传递?
- openCV 2.4.7 添加符号时出错:命令行中缺少 DSO
- C ++如何将我的命令行参数(MAC地址)转换为无符号字符
- Qt Creator 3.2.2./Mac OSX 10.9.3 Qt Creaator中未定义的符号,在命令行中确定
- OpenSSL C++RSA符号与命令行符号不同
- 添加符号时出错:命令行中缺少DSO
- cscope:如何使用命令行搜索符号
- 未定义对符号的引用,命令行中缺少DSO
- 错误:对cv:: videoccapture::~ videoccapture()的引用符号未定义,命令行中缺少DSO