我尝试使用Crypt::OpenPGP,但在解密GPG加密消息时遇到了一些问题。因此,我正在寻找替代方案。我希望该模块能够完全在内存中进行加密/解密,因为我们希望确保数据在任何时候都不会以未加密的状态暴露在磁盘上。服务器将拥有2.x版本的,似乎并非所有模块都支持。是否有一个适合我的好模块可以使用?我发现筛选这些模块有点困难,因为似乎没有一个“最佳”模块,并且它们的年龄也不同。
我尝试使用Crypt::OpenPGP,但在解密GPG加密消息时遇到了一些问题。因此,我正在寻找替代方案。我希望该模块能够完全在内存中进行加密/解密,因为我们希望确保数据在任何时候都不会以未加密的状态暴露在磁盘上。服务器将拥有2.x版本的,似乎并非所有模块都支持。是否有一个适合我的好模块可以使用?我发现筛选这些模块有点困难,因为似乎没有一个“最佳”模块,并且它们的年龄也不同。
正如Rob所说,最好的解决方案是使用XS。
请看一下这本书:Perl扩展和嵌入。
对于那些懂得一些C和C++并希望深入了解XS的人来说,这本书非常好。同时也需要了解Perl知识。
基本上,XS只是Perl公开的API,让您可以访问所有数据结构:
XS模块有两个部分:
为了确保代码按照您的意愿工作,您将需要编写测试。
在编写XS时,我强烈建议您使用:
如果您担心性能问题,我建议您使用callgrind,因为它是最好的工具之一。您可以使用kcachegrind查看callgrind的输出。
您的起点是h2xs。这是一个实用程序,它会生成所有您不想处理的无聊样板文件。为了更好地理解h2xs,请阅读本教程。
请记住,h2xs会为您生成一个Makefile.PL,在运行perl Makefile.PL
后将生成一个标准的Makefile
。从那时起,您可以make
您的模块。确保告诉Makefile.PL
链接libpgp。还要确保您有-g
以编译调试符号。您将遇到需要使用gdb进行调试的情况,而调试符号是必需的。附言: 如果您不想处理所有的XS,可以使用更轻量级的Inline::C或Inline::CPP。但是您将需要阅读上述书籍(或官方Perl XS教程)以了解XS API的基础知识。
我认为您可能会觉得起步有点困难,但一旦您学习了一些XS基础知识,一切都会变得更容易。学习XS的好处是,您不再受限于某个人提供的XS模块支持,您将能够编写自己的模块,或者使用其他XS模块的部分功能。如果您说Crypt::OpenPGP没有您需要的功能,您可以自己编写。