所以我导航到openssl的demos文件夹

/usr/share/doc/libssl-doc/demos/cms

我在那里编译了测试文件
gcc cms_enc.c -o enc -lssl -lcrypto
gcc cms_dec.c -o dec -lssl -lcrypto

然后,我首先启动了这两个命令/enc然后/dec。不幸的是,发生了以下错误
140502142240416:error:0200B009:system library:fread:Bad file descriptor:bss_file.c:245:
140502142240416:error:20082002:BIO routines:FILE_READ:system lib:bss_file.c:246:
140502142240416:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:evp_enc.c:532:

所以这意味着openSSL中的CMS实现已经被破坏了?我想在我自己的c++程序中使用这个功能,但是失败了,所以我想尝试一下,即使是示例也能正常工作。。

最佳答案

I compiled the test files there:

gcc cms_enc.c -o enc -lssl -lcrypto
gcc cms_dec.c -o dec -lssl -lcrypto
...

140502142240416:error:0200B009:system library:fread:Bad file descriptor:bss_file.c:245:

cms_dec.c中有输入错误。向下滚动至第50行,然后交换outNULL。交换之后,应该是:
/* Decrypt S/MIME message */
if (!CMS_decrypt(cms, rkey, rcert, NULL, out, 0))
    goto err;

然后重新编译cms_dec.c。下一次运行后,应该没有错误,decout.txt应该与预期的一样(与encr.txt相同)。

07-26 07:31