2011-10-12 104 views
0

我正在创建一个RESTful API Web服务,我需要一种实现公钥和私钥对的方式。带加密公钥和私钥对的大难题概念

我将使用PHP的一些内置函数来创建我自己的算法来生成这两个键的值。

我只需要了解一般系统背后的概念或逻辑。

示例客户端和服务器具有公钥和私钥值。然后用服务器端解码的客户端上的另一个算法合并密钥,如果匹配,则显示请求的资源?

还是我对他们的方式标记?任何链接或建议将得到很好的评价

+0

私钥生成并存储在服务器上的密钥库中。使用私钥生成公钥。该公钥提供给其他人(例如浏览器)来加密消息以将* back *发送给服务器,服务器只能(有希望地)使用密钥库中的私钥解密。 –

+0

但是,一个*私人*键的重点是**而不是**。 ':)' –

回答

2

有几个算法使用私有/公钥对。它们的三种常见用途是:加密/解密,签名/验证和密钥协议。

对于加密/解密,数据仅使用公钥进行加密,并使用私钥进行解密。 RSA算法就是一个例子。

对于签名/验证,数据使用私钥进行签名,并使用公钥进行验证。 DSA算法就是一个例子。

对于密钥协议,有两方使用其公钥/私钥。各方交换其公钥,并使用私钥,公钥和对端公钥生成共享密钥。 Diffie-Hellman(DH)算法就是一个例子。

正如名字所暗示的,对于任何一方,你都不会给你的私钥。您可以放心地在任何地方发布您的公钥。只有公钥,你不能执行上面需要私钥的任何任务 - 并且显然在给定公钥的情况下计算私钥是不可行的。

+0

公钥/私钥加密的一个更具挑战性的方面是理解公钥是给予发件人的,发件人然后编码(加密)发件人将生成的邮件发回给收件人(谁拥有公钥/私钥)。所以从某种意义上说,这是一种相反的情况,消息发送者接收公钥,消息接收者发送公钥来接收未来的消息,并且总体上**两个**通常都是交易头寸(例如浏览器/服务器,例如)。 –

+0

而第二个也被称为不可否认,对吗? –

+0

@JaredFarrish真的。签名操作做了两件事:确认你发送的消息确实来自你,并且允许接收者稍后证明它来自你(不可否认术语来自后者)。 – vhallac