Perl PGP在内存中进行加密,使用GPG。

3

我尝试使用Crypt::OpenPGP,但在解密GPG加密消息时遇到了一些问题。因此,我正在寻找替代方案。我希望该模块能够完全在内存中进行加密/解密,因为我们希望确保数据在任何时候都不会以未加密的状态暴露在磁盘上。服务器将拥有2.x版本的,似乎并非所有模块都支持。是否有一个适合我的好模块可以使用?我发现筛选这些模块有点困难,因为似乎没有一个“最佳”模块,并且它们的年龄也不同。


你是否考虑过编写 XS 代码以直接与 libgpg 进行接口? - Rob
不好意思,XS 在我看来很混乱,文档也不够清晰。我找到了一个足够好用的 GPG 封装程序。 - xenoterracide
1个回答

0

正如Rob所说,最好的解决方案是使用XS。

请看一下这本书:Perl扩展和嵌入

对于那些懂得一些C和C++并希望深入了解XS的人来说,这本书非常好。同时也需要了解Perl知识。

基本上,XS只是Perl公开的API,让您可以访问所有数据结构:

  • 标量
  • 全局变量
  • 哈希表
  • 引用
  • 数组
  • 等等

XS模块有两个部分:

  • 一个是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进行调试的情况,而调试符号是必需的。
此外,这里有一份关于XS的演示文稿。它将是XS的很好介绍。
我还建议您购买那本书,它非常棒。我在编写XS代码时使用过它,对我非常有帮助(现在仍然如此)。

附言: 如果您不想处理所有的XS,可以使用更轻量级的Inline::CInline::CPP。但是您将需要阅读上述书籍(或官方Perl XS教程)以了解XS API的基础知识。

我认为您可能会觉得起步有点困难,但一旦您学习了一些XS基础知识,一切都会变得更容易。学习XS的好处是,您不再受限于某个人提供的XS模块支持,您将能够编写自己的模块,或者使用其他XS模块的部分功能。如果您说Crypt::OpenPGP没有您需要的功能,您可以自己编写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接