簡體   English   中英

使用使用C#加密的PHP解密字符串

[英]Decrypt string using PHP that was encrypted using c#

我需要解密一個字符串,該字符串是從最初使用c#函數根據此處的功能進行加密的API返回的>

http://www.codeproject.com/Tips/704372/How-to-use-Rijndael-ManagedEncryption-with-Csharp

我需要使用PHP解密。

已經提供了密碼和密鑰。我已經多次嘗試使用openssl_decrypt進行解密,但是我不確定如何在解密中使用密鑰?

[更新]有人告訴我,輸入的密碼是iv的基礎,並且填充是PKCS7,問題是我不知道如何創建iv。

我有以下示例輸入/鍵,但是我不知道如何使用密碼,因為有人告訴我我需要將密碼填入正確的長度,如果是的話,該怎么辦?

Original string: 'Mondays Suck'
Password/salt: 'this_is_the_password'
Input key: 'this_is_the_input_key'
Encrypted String: 'mAqsxJaA0jpQdefBPug2tw=='

如果確實存在任何密文打包,則假設首先使用一個初始化矢量,則將包括初始化矢量(IV)。

簡而言之,如果我使用AES-128加密了一個字符串:

  1. 我可能會使用PBKDF2來獲取一個弱密碼短語和一個鹽來生成用於加密本身的密鑰材料。
  2. 我將生成特定於消息的(即一次性使用)初始化向量以進行加密
  3. 然后,我將使用在先前步驟中生成的密鑰[material]和IV使用AES-128對字符串進行加密: E(plaintext, key, iv)
  4. 如果字符串長於16個字節,我還必須使用加密模式,例如CBC,CTR等。
  5. 為了方便起見,我將通過簡單地連接: iv+ciphertext將“ IV”(不需要保密)包裝在密文前面。
  6. 如果我認真對待正確的做法,則將生成密文的消息身份驗證代碼,並附加該消息身份驗證代碼,這樣我現在將擁有: iv+ciphertext+mac

在解密時,我將在解密之前驗證MAC(如果我做對了),然后需要將IV與密文分開,然后通過解密例程運行它: D(ciphertext, key, iv)

要記住的另一件事是編碼,因為有時我們將Base64編碼的字符串傳遞為比原始數據更易於打印的格式。 當然,在進行拆包,解密等工作之前,您必須先對其進行解碼。

出於學術目的,當我自學加密技術時,我創建了Crypto Implementation(DRAFT) ,並希望記錄流程和最佳實踐,並在我必須從事這些工作時將所有“活動部分”作為參考。 要遵循很多規則,但總的來說,會有很多良好的學習和專業發展機會。

希望對您有所幫助!

編輯:根據下面的評論,我只是看了C#實現的原始源代碼。 看來,用PHP解密的唯一方法是擁有與C#的Rfc2898DeriveBytes等效的PHP,因為這是負責生成IV的部分。 研究DecryptRijndael例程,您將看到它從何處獲得IV(它基本上意味着使用相同的鹽)。 如果您對加密例程確實沒有控制權或影響力,那么您可能傾向於使用PHP使用C#DLL的解決方案,然后從PHP中調用DecryptRijndael方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM