【问题标题】:Perl PGP in memory encryption that uses GPG使用 GPG 的内存加密中的 Perl PGP
【发布时间】:2012-09-26 21:39:13
【问题描述】:

I tried using Crypt::OpenPGP but encountered some issues decrypting GPG encrypted messages. 所以现在我正在寻找替代品。我希望模块能够完全在内存中进行加密/解密,因为我们希望确保数据在任何时候都不会以未加密状态暴露在磁盘上。服务器将有一个 gpg 版本 2.x,似乎并非所有模块都支持。有一个好的模块供我使用吗?我发现筛选这些模块有点困难,因为似乎没有一个“最好”的模块,而且它们的年龄各不相同。

【问题讨论】:

  • 您是否考虑过编写 XS 代码以直接与 libgpg 交互?
  • 不,在我看来,XS 令人困惑并且没有很好的记录。我发现了一个运行良好的 GPG 包装器。

标签: perl gnupg pgp


【解决方案1】:

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

请看这本书:Extending and Embedding Perl

这本书非常适合了解 C 和 C++ 并希望深入研究 XS 的人。 Perl 知识也是必要的。

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

  • 标量
  • 球体
  • 哈希
  • 参考文献
  • 数组

XS 模块有 2 个部分:

  • 使用 C 或 C++ 代码(取决于您如何告诉 h2xs)
  • 代码也是 C/C++,但在语法上有一些细微差别,xspp 将其转换为 C/C++

您必须为您的代码编写测试,以确保它按您希望的方式工作。

在编写 XS 时,我强烈建议您使用:

如果您可能有性能问题I recommend you use callgrind,因为它是目前最好的分析工具之一。你可以使用kcachegrind查看callgrind的输出。

您的起点是h2xs。它是一个实用程序,可以生成您不想处理的所有无聊样板。为了了解h2xs read this tutorial

请记住,h2xs 将为您生成一个 Makefile.PL,在您运行 perl Makefile.PL 后将生成一个标准的 Makefile。从那时起,您可以make您的模块。确保告诉 Makefile.PLlibpgp 链接。还要确保您有 -g 以使用调试符号进行编译。您将遇到必须使用 gdb 进行调试并且需要调试符号的情况。

另外,here is a presentation on XS called Baby XS。这将是一个很好的 XS 介绍。

我也建议你买那本书,太棒了。我在编写 XS 代码时使用过它,它对我非常有帮助(现在仍然如此)。

附言 如果不想处理所有的 XS,可以使用更轻量级的Inline::CInline::CPP。但是您必须阅读上面提到的书(或official Perl XS tutorial)才能了解 XS API 的基础知识。

我认为你觉得开始有点困难,但是一旦你学习了一些 XS 基础知识,一切都会容易得多。学习 XS 的好处是,您不再依赖于为 XS 模块提供支持的人,您将能够编写自己的代码,或使用其他 XS 模块的零碎部分。如果你说 Crypt::OpenPGP 没有你需要的功能,你可以自己写。

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多