我尝试使用 Crypt::OpenPGP 但在解密 GPG 加密消息时遇到了一些问题。所以现在我正在寻找替代品。我希望模块能够完全在内存中进行加密/解密,因为我们希望确保数据在任何时候都不会以未加密状态暴露在磁盘上。服务器将具有gpg
2.x 版本,似乎并非所有模块都支持。有一个好的模块供我使用吗?我发现筛选这些模块有点困难,因为似乎没有一个“最好”的模块,而且它们的年龄各不相同。
1 回答
正如 Rob 所说,最好的解决方案是使用 XS。
请看这本书:Extended and Embedding Perl。
这本书非常适合那些了解一些 C 和 C++ 并希望深入研究 XS 的人。Perl 知识也是必要的。
基本上,XS 只是 Perl 公开的 API,以便您访问所有数据结构:
- 标量
- 球体
- 哈希
- 参考
- 数组
- ETC
XS 模块有 2 个部分:
- 一个使用 C 或 C++ 代码(取决于你如何告诉 h2xs)
- 一个代码也是 C/C++,但在语法上有一些小的差异,这些差异由xspp转换为 C/C++
您必须为您的代码编写测试,以确保它按您希望的方式工作。
在编写 XS 时,我强烈建议您使用:
如果您可能有性能问题,我建议您使用 callgrind,因为它是目前最好的分析器工具之一。您可以使用 kcachegrind查看 callgrind 的输出。
您的起点是h2xs。它是一个实用程序,可以生成您不想处理的所有无聊样板。为了掌握h2xs 的一些知识,请阅读本教程。
请记住,h2xs 将为您生成一个 Makefile.PL,在您运行perl Makefile.PL
后将生成一个标准的Makefile
. 从那时起,您可以使用make
您的模块。确保你告诉Makefile.PL
链接libpgp。还要确保您可以-g
使用调试符号进行编译。您将遇到必须使用 gdb 进行调试并且需要调试符号的情况。
此外,这里有一个名为 Baby XS 的 XS 演示文稿。这将是对 XS 的一个很好的介绍。
我也建议你去买那本书,太棒了。我在编写 XS 代码时使用过它,它对我非常有帮助(现在仍然如此)。
PS 如果不想处理所有的 XS,可以使用更轻量级的Inline::C或Inline::CPP。但是你必须通过上面提到的书(或官方 Perl XS 教程)来了解 XS API 的基础知识。
我认为你觉得开始有点困难,但是一旦你学习了一些 XS 基础知识,一切都会容易得多。学习 XS 的好处是,您不再依赖于为 XS 模块提供支持的人,您将能够编写自己的代码,或使用其他 XS 模块的零碎部分。如果你说 Crypt::OpenPGP 没有你需要的功能,你可以自己写。