我需要使用预先生成的私钥(private.pgp)和密码来签署MD5哈希。 (例如123456abc)在apache2上运行的php脚本中。我也在使用gnupg。
这就是我现在这样做的方式:
<?php
$keyring = "/pubkeys/.gnupg"; //this direcrtory owned by www-data
putenv("GNUPGHOME=$keyring");
$res = gnupg_init();
var_dump($res); //for debug
$info = gnupg_import($res,'private.pgp');
var_dump($info); //for debug
?>
因此,gnupg_import()会返回 false 。为什么会这样? 我也尝试使用这个php脚本从同一目录中的文件中读取密钥,但是出现了同样的错误。请帮忙。
谢谢。
答案 0 :(得分:1)
假设您使用的是基于Ubuntu / Debian的操作系统,这就是我要处理的情况: 安装依赖项。
创建简单测试脚本的步骤。
执行上面的步骤 4和5 之后,您应该有两个文件 private_key.asc 和 public_key.asc 现在,在同一文件夹中创建 pgp_example.php 文件,并添加以下代码行:
<?php
$gpg = new gnupg();
$privateAsciiKey = file_get_contents('private_key.asc');
$publicAsciiKey = file_get_contents('public_key.asc');
/**
* import private and public keys
*/
$privateKey = $gpg->import($privateAsciiKey);
$publicKey = $gpg->import($publicAsciiKey);
$fingerprint = $publicKey['fingerprint'];
$passphrase = ''; // empty string because we didn't set a passphrase.
$plain_text = "Put Some text to encrypt here";
// catch errors
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
// encrypt plain text
try{
$gpg->addencryptKey($fingerprint);
$ciphertext = $gpg->encrypt($plain_text);
echo "\n". $ciphertext ."\n";
}
catch(Exception $e){
die('Error '.$e->getMessage());
}
// decrypt text
try{
$gpg->adddecryptkey($fingerprint, $passphrase);
$plain_text = $gpg->decrypt($ciphertext);
echo "\n". $plain_text ."\n";
}
catch(Exception $e){
die('Error: '. $e->getMessage());
}
要执行此代码,请打开终端并运行 php pgp_example.php
答案 1 :(得分:0)
该手册是您的朋友:php.net/manual/en/function.gnupg-import.php第二个参数应该是数据,而不是文件名。 –Sammitch