【问题标题】:openssl smime demo programs (smenc.c and smdec.c) produces inconsistent resultopenssl smime 演示程序(smenc.c 和 smdec.c)产生不一致的结果
【发布时间】:2018-05-05 06:07:51
【问题描述】:

我正在查看 openssl-1.0.1e/demos/smime 下的示例程序。这是我的步骤:

gcc -o smenc smenc.c -lcrypto
gcc -o smdec smdec.c -lcrypto
./smenc     -> This encrypts encr.txt into smencr.txt
./smdec     -> This decrypts smencr.txt into encrout.txt

现在将往返结果与原始结果进行比较:

vimdiff -b encr.txt encrout.txt

您可以看到往返结果的每一行都有一个额外的“\r”。有人知道这些 '\r' 字符是在什么阶段添加的吗?

提前致谢

【问题讨论】:

  • 1.0.1 已经很老了,顺便说一句不支持了。

标签: encryption openssl smime


【解决方案1】:

答案实际上在 smime(1) 手册页中。寻找“-binary”标签。在加密过程中,如果不使用“-binary”标志,代码会将所有EOL替换为“\r\n”。

作为一个很好的例子,我认为演示代码应该具有往返一致性。要具有此行为,您可以修改 smenc.c 以具有如下标志行:

  int flags = PKCS7_STREAM|PKCS7_BINARY

不过,我发现它很难。对于有兴趣跟踪 openssl 代码的人,这是我所做的:

  • 下载openssl-1.0.1e,运行“./config --openssldir=”(不然你会收到openssl.cnf的抱怨,不过这很容易解决),然后修改./Makefile替换CFLAGS 中的“-O3”和 -g,然后运行“make”。

  • 在 demos/smime 下,以这种方式构建加密和解密代码,以便您也可以跟踪加密库,否则您可能会链接到系统 libcrypto:

    gcc -g -o smdec smdec.c -L../../ -lcrypto -ldl
    gcc -g -o smenc smenc.c -L../../ -lcrypto -ldl
    
  • 现在您可以运行“gdb --args ./smenc”并在 SMIME_crlf_copy() 处中断。运行回溯,您可以看到它是如何到达那里的,以及如何将 CRLF 添加到每一行。

【讨论】:

    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 2017-08-18
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多