簡體   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