[英]PHP ASCII Armored PGP encrypted string
我需要使用第三方提供給我的公鑰,在MediaWiki環境中使用PGP加密和ASCII裝甲一個小字符串/標記。 這給了我:
我打算在閱讀之后使用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.