PHP Conference Japan 2024

gnupg_encrypt

(PECL gnupg >= 0.1)

gnupg_encrypt加密给定的文本

描述

gnupg_encrypt(资源 $identifier, 字符串 $plaintext): 字符串|false

使用之前用 gnupg_addencryptkey 设置的密钥加密给定的 $plaintext,并返回加密后的文本。

参数

identifier

来自 gnupg_init()gnupg 调用的 gnupg 标识符。

plaintext

要加密的文本。

返回值

成功时,此函数返回加密后的文本。失败时,此函数返回 false

示例

示例 #1 过程化 gnupg_encrypt() 示例

<?php
$res
= gnupg_init();
gnupg_addencryptkey($res,"8660281B6051D071D94B5B230549F9DC851566DC");
$enc = gnupg_encrypt($res, "just a test");
echo
$enc;
?>

示例 #2 OO gnupg_encrypt() 示例

<?php
$gpg
= new gnupg();
$gpg->addencryptkey("8660281B6051D071D94B5B230549F9DC851566DC");
$enc = $gpg->encrypt("just a test");
echo
$enc;
?>

添加笔记

用户贡献笔记 6 个笔记

Mahbub Kabir
10年前
// 要在命令行中生成密钥类型,请键入 gpg --gen-key
// 要导出公钥,请键入 gpg --export -a "用户名" > public.key

<?php
putenv
("GNUPGHOME=/tmp");

// 假设公钥存在于 /tmp/keys 文件夹中
$publicKey = file_get_contents(getenv('GNUPGHOME') . '/keys/public.key');

$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
$info = $gpg->import($publicKey);
$gpg->addencryptkey($info['fingerprint']);

$uploadFileContent = file_get_contents('/tmp/file-to-encrypt');
$enc = $gpg->encrypt($uploadFileContent);
echo
$enc

希望这有帮助
nick johnson
16年前
在尝试使此扩展程序工作一段时间后,我发现必须设置GNUPGHOME环境变量才能找到密钥链,并且必须将其设置为.gnupg目录本身,而不是apache/httpd用户的home目录(丹的示例代码中显示的内容)。以下是此示例以及我当时正在处理的一个简单函数,用于加密要存储在数据库中的数据。

<?php
// 设置环境以便gnupg可以找到密钥环
putenv("GNUPGHOME=/home/apache/.gnupg");

function
encrypt_string($str,$fingerprint) {
$res = gnupg_init();
gnupg_addencryptkey($res,$fingerprint);
$enc = gnupg_encrypt($res, $str);
return
$enc;
}
?>
Stressed dev. 权限问题 (SELinux)
2年前
如果您使用的是 CentOS 8,并且遇到文件夹权限问题,请记住在开发期间禁用 SELinux(/etc/selinux/config),只需将其更改为禁用或许可即可。当您的项目上线时,将其切换回强制执行并添加正确的安全上下文。
emiliocolombo3 at gmail dot com
8年前
示例

获取密钥信息

<?php
putenv
('GNUPGHOME=/home/sender/.gnupg');

// 创建新的 GnuPG 对象
$gpg = new gnupg();

// 如果发生错误则抛出异常
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);

// 获取包含字符串“example”的密钥列表
try {
$keys = $gpg->keyinfo('example');
print_r($info);
} catch (
Exception $e) {
echo
'ERROR: ' . $e->getMessage();
}
?>

加密简单的邮件

<?php
// 设置密钥环目录路径
// 设置密钥环目录路径
putenv('GNUPGHOME=/home/sender/.gnupg');

// 创建新的GnuPG对象
$gpg = new gnupg();

// 发生错误时抛出异常
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);

// 收件人的电子邮件地址
$recipient = '[email protected]';

// 明文消息
$plaintext =
"尊敬的Dave:\n
答案是42。\n
John"
;

// 查找与电子邮件地址匹配的密钥
// 加密明文消息
// 显示并写入文件
try {
$gpg->addencryptkey($recipient);
$ciphertext = $gpg->encrypt($plaintext);
echo
'<pre>' . $ciphertext . '</pre>';
file_put_contents('/tmp/ciphertext.gpg', $ciphertext);
} catch (
Exception $e) {
die(
'错误:' . $e->getMessage());
}
?>

邮件解密

<?php
// 设置密钥环目录路径
putenv('GNUPGHOME=/home/recipient/.gnupg');

// 创建新的GnuPG对象
$gpg = new gnupg();

// 发生错误时抛出异常
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);

// 收件人的电子邮件地址
$recipient = '[email protected]';

// 密文消息
$ciphertext = file_get_contents('/tmp/ciphertext.gpg');

// 通过提供密码注册私钥
// 使用私钥解密密文
// 显示明文消息
try {
$gpg->adddecryptkey($recipient, 'guessme');
$plaintext = $gpg->decrypt($ciphertext);
echo
'<pre>' . $plaintext . '</pre>';
} catch (
Exception $e) {
die(
'错误:' . $e->getMessage());
}
?>
cressbrook dot co dot uk 的 paul
17 年前
你好

我发现 apache 或 httpd 用户(或者 web 服务器用来运行的任何用户)需要对 .gnupg 目录具有写入权限才能使 gnupg_php 函数正常工作。这可能是你的问题。这个模块的一个相当令人不满意的特性——gnupg 一直发出警告说它不安全。
f-box dot org 的 dan
16年前
这是一个简单的过程式使用 import addencryptkey 和 encrypt 的示例。显然,在实际应用中,你只需要导入密钥一次。

<?php

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

mQGiBEe68W8RBACVuFuv4d+roDSCdRO1SuO8dQwds4VTjVOqgVKQtq6+8Fe95RY8
BAf1IyLj4bxvWPhr0wZdVwTosD/sFoPtdCyhVcF932nP0GLHsTEeVwSz9mid22HI
O4Kmwj2kE+I+C9QdzAg0zaWQnVaF9UC7pIdMR6tEnADI8nkVDdZ+zb2ziwCg6Yqu
tk3KAzKRT1SNUzTE/n9y2PED/1tIWiXfGBGzseX0W/e1G+MjuolWOXv4BXeiFGmn
8wnHsQ4Z4Tzk+ag0k+6pZZXjcL6Le486wpZ9MAe6LM31XDpQDVtyCL8t63nvQpB8
TUimbseBZMb3TytCubNLGFe5FnNLGDciElcD09d2xC6Xv6zE2jj4GtBW1bXqYWtl
jm0PA/4u6av6o6pIgLRfAawspr8kaeZ8+FU4NbIiS6xZmBUEQ/o7q95VKGgFVKBi
ugDOlnbgSzBIwSlsRVT2ivu/XVWnhQaRCotSm3AzOc2XecqrJ6F1gqk0n+yP/1h1
yeTvvfS5zgqNTG2UmovjVsKFzaDqmsYZ+sYfwc209z9PY+6FuLQnQXBhY2hlVGVz
dCAoVGVzdGluZykgPGFwYWNoZUBsb2NhbGhvc3Q+iF4EExECAB4FAke68W8CGwMG
CwkIBwMCAxUCAwMWAgECHgECF4AACgkQJE9COu2PFIEGDwCglArzAza13xjbdR04
DQ1U9FWQhMYAnRrWQeGTRm+BYm6SghNpDOKcmMqruQENBEe68XAQBADPIO+JFe5t
BQmI4l60bNMNSUqsL0TtIP8G6Bpd8q2xBOemHCLfGT9Y5DN6k0nneBQxajSfWBQ5
ZdKFwV5ezICz9fnGisEf9LPSwctfUIcvumbcPPsrUOUZX7BuCHrcfy1nebS3myO/
ScTKpW8Wz8AjpKTBG55DMkXSvnx+hS+PEwADBQP/dNnVlKYdNKA70B4QTEzfvF+E
5lyiauyT41SQoheTMhrs/3RIqUy7WWn3B20aTutHWWYXdYV+E85/CarhUmLNZGA2
tml1Mgl6F2myQ/+MiKi/aj9NVhcuz38OK/IAze7kNJJqK+UEWblB2Wfa31/9nNzv
ewVHa1xHtUyVDaewAACISQQYEQIACQUCR7rxcAIbDAAKCRAkT0I67Y8UgRwEAKDT
L6DwyEZGLTpAqy2OLUH7SFKm2ACgr3tnPuPFlBtHx0OqY4gGiNMJHXE=
=jHPH
-----END PGP PUBLIC KEY BLOCK-----"
;

$enc = (null);
$res = gnupg_init();
echo
"gnupg_init RTV = <br/><pre>\n";
var_dump($res);
echo
"</pre>\n";
$rtv = gnupg_import($res, $pubkey);
echo
"gnupg_import RTV = <br/><pre>\n";
var_dump($rtv);
echo
"</pre>\n";
$rtv = gnupg_addencryptkey($res, "C25F29936D9046D73A77DCF8244F423AED8F1481");
echo
"gnupg_addencryptkey RTV = <br /><pre>\n";
var_dump($rtv);
echo
"</pre>\n";
$enc = gnupg_encrypt($res, "只是一个测试,看看是否有效");
echo
"加密数据: " . $enc . "<br/>";

?>
To Top