假设我有一个生成字符串的程序。我希望使用私钥对该字符串进行签名,这样我就可以确定该字符串实际上是由程序生成的,而不是以任何其他方式生成。
我能做到这一点的唯一方法是在代码中隐藏字符串,但在开源程序的情况下,你需要一种方法只在编译时插入这个键。
实现此任务的最佳/最简单方法是什么(使用C ++)?
(对于C ++,我在考虑一些在编译时生成一些键的预处理器指令。)
答案 0 :(得分:3)
好吧,您可以使用预编译常量,该常量可以通过-D
中的Makefile
标记传递给您的编译器。
与此相结合,您可以使用configure脚本生成Makefile,以计算和设置此常量。
-D name = definition 定义的内容被标记化并处理,就像它们在'#define'指令中的翻译阶段3中出现一样。特别是,定义将被嵌入的换行符截断。 如果从shell或类似shell的程序调用预处理器,则可能需要使用shell的引用语法来保护字符,例如在shell语法中具有意义的空格。
如果您希望在命令行中定义类似函数的宏,请在等号(如果有)之前在其参数列表周围加上周围的括号。括号对大多数shell都有意义,因此您需要引用该选项。使用sh和csh,-D'name(args ...)= definition'可以工作。