2011-11-24 22 views
0

任何人都可以指向正确的方向。Public Private Key Crypto - PHP&C#

我想用私钥加密字符串服务器端(PHP),然后用公钥解密客户端(c#)以验证发送的消息的真实性。

感谢

+1

你正在使用什么样的加密方法,你有证书吗?大多数加密问题都可以用bouncycastle来解决。 HTTP://www.bouncycastle。org/csharp/ – albertjan

+0

使用RSA,这就是全部)) – Nikita

+0

还没有使用任何一种加密方式,宁愿使用不是证书的东西,只要可能的话,尽可能使用密钥 –

回答

1

不要试图拿出基于基本的加密算法(如RSA)的自定义加密方案。安全协议很难正确使用;您不仅需要考虑对数据进行加密或签名,还需要考虑中间人攻击,重放攻击,填充oracle攻击等等。

我建议您使用易于使用和理解的标准化,经过充分测试的安全协议:使用HTTPS。

+0

但是之后我必须购买一个非常昂贵的证书 –

+3

您可以使用随应用程序一起提供的自签名证书。 – dtb

+0

@JamieHunt如果你从“更多公认的”机构购买它们,它们只是非常昂贵。那里有很多便宜的东西,它们可以完全相同的目的。 –

0

.NET包含用于RSA加密/解密的标准函数。

要在PHP中使用RSA,您可以在Google中找到很多实现。

只有你将在未来的跌跌问题是在PHP和.NET PROGRAMM之间传输数据:

  • 你可能要使用的base64字符串
  • ,如果你想用GET或POST发送数据你必须使用this解决方案

ADDED

RSA是实现算法不难实现。

this怎么办?

同一主题讨论了herehere

+0

你能推荐任何RSA php实现吗?我似乎找不到一个好的,他们都需要我在服务器上安装一个PHP模块,或者非常缓慢,过时和无人维护。 –

+0

@JamieHunt,我更新了我的答案 – Nikita

+0

我建议使用RSA的标准实现,而不是自制的。正如我在我的回答中解释的那样,您需要签名,而不是加密。 –

0

你想要做什么通常被称为签名而不是加密

即使在教科书RSA签名为“具有私有密钥,解密与公众一个加密”解释说,在现实中,它采用了稍有不同的程序(在部分实际的“加密”)之前,因此,你有不同的用于签名而不是用于加密。

对于PHP中的签名,看起来您可以使用openssl_sign函数。

要检查C#中的签名,可以使用.NET的RSACryptoServiceProvider类,并使用它的VerifyData方法。当然,如果您的目标仅仅是互联网中两个实体(即从服务器到客户端)之间的认证传输,那么使用SSL/TLS就是标准解决方案。如果您在应用程序中分发根证书,您可以使用自己的证书(或来自您自己的CA的证书),而不使用来自商业CA的昂贵证书。

+0

这两个函数是您提到的彼此兼容的功能? – Devela

+0

您可能需要研究为每个函数(或类)提供哪些算法名称以使它们兼容。我没有使用任何一个,所以我还不能作证。 –

+0

看起来这是一个相当艰难的转换,我发现有几种方法来做到这一点,但不是那么干净。 – Devela

相关问题