首页 > 解决方案 > 为什么 OpenSSL 加密函数在成功时返回 1,在失败时返回 0?

问题描述

一直在编写使用 OpenSSL 的代码,我注意到,令人困惑的是,大多数加密库函数返回 1 表示成功,0 表示失败:

所以我的问题是,为什么 OpenSSL 不使用典型的 C/POSIX 标准返回值

标签: copensslreturn-value

解决方案


传统上,在 C 中,整数值0代表false1代表true,OpenSSL 遵循该约定。有关某些上下文,请参阅有关 Boolean 数据类型的 Wikipedia 页面的这一部分:

C 语言(1972 年)的初始实现没有提供布尔类型,直到今天,布尔值通常在 C 程序中由整数(整数)表示。比较运算符(>、== 等)被定义为返回有符号整数 (int) 结果,0(表示假)或 1(表示真)。

随着 C99中类型的引入,这种情况有所改变,但 OpenSSL 的初始实现早于该类型——因此使用了and_Bool的整数值。此外,在某些情况下,OpenSSL 函数使用不同的整数值来指示不同类型的结果。01

您所指出的关于返回值的SO 答案专门关于进程退出值的特殊情况,该值将返回给其父级。实际上,对于那种特定情况,零值表示成功。但这不是一般应用于函数返回值的典型方法。


推荐阅读