如何使用公钥/私钥在php中加密数据? - php

我有一小串一些数据(小于1kb),当用户代理从我的站点发送时,我希望这些代理传递给其他站点。为了让其他站点验证我是否是创建字符串I的站点,有两个选择。

服务器对我执行ping操作以确认(例如Paypal,openid等)。
我使用公钥/私钥来证明我发送了消息(例如PGP,DKIM等。)

我不想设置HMAC,因为这意味着我必须为每个站点使用自定义密钥,这很痛苦。

在这两个选择中,似乎#2可以节省带宽,这似乎是一个更好的选择。

那么,如何使用PHP设置公钥/私钥加密,还有什么缺点呢?

参考方案

我将使用OpenSSL创建S / MIME公共/私有密钥对,然后使用OpenSSL命令进行加密和解密。我相信这优于使用PGP,因为大多数Linux操作系统都包含openssl,而PGP没有。 OpenSSL也是基于标准的,一旦关闭命令,通常就更容易使用。

我建议使用“纯PHP”解决方案(对于纯PHP,我的意思是在PHP中进行加密,而不是使用PHP调用现有库或单独的可执行文件)。您不想在PHP中进行批量加密。太慢了。您想使用OpenSSL,因为它的高性能和安全性已广为人知。

这是魔术。

制作X.509密钥:

$subj="/C=US/ST=California/L=Remote/O=Country Govt./OU=My Dept/CN=Mr. Agent/[email protected]"
openssl req -x509 -newkey rsa:1024 -keyout mycert.key -out mycert.pem -nodes -subj $subj

这会将私钥放在mycert.key中,将公钥放在mycert.pem中。私钥不受密码保护。

现在,要使用S / MIME签名消息:

openssl smime -sign -signer mycert.pem -inkey mycert.key <input >output

要使用S / MIME加密邮件,请执行以下操作:

openssl smime -encrypt -recip yourcert.pem <input >output

要使用S / MIME解密邮件:

openssl smime -decrypt -inkey mycert.key -certfile mycert.pem <input >output

我也有一些有关通过C语言绑定使用OpenSSL的演示,但没有有关PHP的演示。

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

PHP:将字符串拆分为字母和数字部分的最佳方法 - php

我有几个格式的字符串AA11 AAAAAA1111111 AA1111111 分离字符串的字母和数字部分的最佳方法(最有效)? 参考方案 如果它们都是一系列字母,然后是一系列数字,并且没有非字母数字字符,那么sscanf()可能比regexp更有效$example = 'AAA11111'; list($alpha,$numeric) =…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

php:是否有充分的理由引用所有数组键/索引? - php

我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…