[英]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加密了一個字符串:
E(plaintext, key, iv)
iv+ciphertext
將“ IV”(不需要保密)包裝在密文前面。 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.