Encrypted string From Delphi to C#

筅森魡賤 提交于 2019-12-01 09:28:54
WhiteFang34

You need to determine all of the details of how that value was encrypted:

  1. What block cipher mode of operation was used? ECB tends to be a default.
  2. What padding scheme was used? Perhaps no padding in your case.
  3. How was the key derived from the password? Perhaps with PBKDF2 or simply a MD5 hash.
  4. What was the initialization vector? Note that only some cipher modes require one.
  5. How was the output encoded? It appears to be Base64 encoding for you.

Only once you know exactly how it was encrypted can you reverse the process to properly decrypt it. You might want to try posting more code or details about how it was encrypted. Then someone might be able to determine how you need to go about decrypting it. I've seen this scenario with unknowns before and I managed to guess the details to find the answer. I tried a few common ways with your encrypted string, but I can't easily decrypt it without more details.

You are saying that you can encrypt in C# and decrypt in C#. You can also encrypt in C# and decrypt in Delphi. This means that your C# encryption is definitely fine. That leaves just one possible culprit: Delphi encryption.

So do this:

  • Encrypt in C#.
  • Encrypt in Delphi.
  • Compare the outputs.

They can't possibly be the same. See in what way they differ. Is one Base64-encoded and the other just raw bytes? Is one padded with == and the other not? Do they use different Base64 variants?

Try going the other way. i.e. encrypt the string in c# and see if it matches. See if your C# solution can even eat its own dogfood.

My guess is that the Delphi encryption encodes the string as an Ansi string (one byte per character) and the C# encryption encodes the string as a Unicode UTF16 string (two bytes per character). If you are using Delphi 2007 and below this is almost certainly the case.

PS The length of the encrypted string in Delphi is also a bit of a giveaway - 32 characters for a 22 character raw string implies one byte per character - this is not the case for C#.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!