繁体   English   中英

PHP ASCII Armored PGP加密字符串

[英]PHP ASCII Armored PGP encrypted string

我需要使用第三方提供给我的公钥,在MediaWiki环境中使用PGP加密和ASCII装甲一个小字符串/标记。 这给了我:

  • 需要使用PHP
  • 最好远离exec_shell()......是吗?
  • Web服务器环境

我打算在阅读之后使用GnuPG lib: http//devzone.zend.com/1278/using-gnupg-with-php/

什么用户应该将PGP公钥存储在他们的.gnupg文件夹中?


更新1

到目前为止,我正在测试硬编码公钥(现在,只是为了测试它)

// GnuPG stuff
putenv("GNUPGHOME=/tmp");
$pubkey = "-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.6 (GNU/Linux)
...key...
-----END PGP PUBLIC KEY BLOCK-----";

$ token="some text";
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION); 

try 
{
    $info = $gpg->import($pubkey);
//  var_dump($info); // to see fingerprint
    $info = $gpg -> addencryptkey("...fingerprint...");
    $enc = $gpg -> encrypt($token);
} 
catch (Exception $e) {
    echo 'ERROR: ' . $e->getMessage();
}


$token = urlencode($enc);
echo $token, "\n";

它似乎加密,现在我只需要弄清楚我是否需​​要/可以剥离

Encrypted Data: -----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.5 (GNU/Linux)

因为我正在加密URL的令牌

可以使用PHP的gnupg函数启用Ascii铠装输出。 看看setarmor

添加此行,可能最好在创建$gpg对象后直接添加:

$gpg -> setarmor(1);

但是文件说ascii装甲将是默认的; 你得到什么输出,你想要哪个? 邮寄时,发送ascii装甲很方便; 否则你通常直接选择较小的二进制格式。 从未见过带有“标题”的ascii装甲OpenPGP。


对于你较小的问题:

最好远离exec_shell()......是吗?

如果它被禁用,那么就没有决定。 只要PHP的gnupg函数具有您需要的所有功能,就更喜欢它们; 他们从麻烦的接口gpg中拯救你(没有直接的API,而是命令行工具)。 引入任何漏洞的机会也较小。

什么用户应该将PGP公钥存储在他们的.gnupg文件夹中?

为Web服务器选择一个可读的文件夹(可能不可写?)但使用HTTP无法访问(因此没有人能够获取您的密钥)。 您似乎已经意识到如何设置此路径。

它似乎加密,现在我只需要弄清楚我是否需​​要/可以剥离

[剪断]

我会用一些正则表达式。

preg_match('/[\n\r]([=\n\r[:alnum:]]+)[\n\r]/', $token, $matches);

应该做; 也许它更优雅地剥离所有行为空或包含斜线或冒号。

在基本级别,请尝试以下代码。 它不会添加ASCII装甲,但它确实将其转换为屏幕友好(非二进制)格式,您可以轻松装备自己。

<?php
$data = 'Secret info';
$encrypted = null;
$ok = openssl_public_encrypt($data, $encrypted, $pubKey);

if ($ok) {
    // Optionally, encode it so you can echo it onscreen
    $encrypted = base64_encode($encrypted);
    echo $encrypted . "\n";
} else {
    echo "Failed to encrypt\n";
}

我不知道你是否可以直接将PGP公钥导入OpenSSH,但是如果你需要, 这个答案可能会帮助你在密钥格式之间进行转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM