2011-11-24 39 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

相關問題