TripleDES解密有效,但中间有一些加扰的文本

时间:2019-06-22 05:08:04

标签: c# encryption encoding md5 tripledes

我正在解密未创建的内容。作者使用Java程序对其进行了加密,而我正在尝试使用C#对其进行解密。他们为我提供了加密背后的逻辑(整数键数组,编码类型和TripleDES),而我一直在试图弄清楚这一点。

长话短说,我已经能够解密大部分文本,但是中间总是很混乱。

我对此进行了大量研究,试图弄清楚issue of Java's negative byte numbers。这可能是我的解密部分起作用的原因,因为我给定的Java密钥整数的一半为负数。但是,即使我手动更改字节数以与C#等效项相对应,或使用BitConverter,我仍然会得到相同的加扰结果。

另一件事可能是我似乎无法获得UTF-8编码来提供比ASCII更好的结果。

代码。我将24字节的整数(作为字符串)存储在App.Config中,并在代码中将其转换为整数:

我遍历所有字符串以获得所需的字节数组:(ipstr是循环中的第n个字符串)

int dii = Convert.ToInt32(ipstr);
byte[] intBytes2 = BitConverter.GetBytes(dii);
if (BitConverter.IsLittleEndian)
    Array.Reverse(intBytes2);
byte[] result = intBytes2;

然后,我在字节对话中使用第4个索引来保存完全转换的字节数组,以进行三重DES解密。

FinalByteArr[j - 1] = result[3];

这似乎是一项艰巨的工作,但是它将我源自Java的负字符串键转换为C#0-256字节键数组。

然后我从它们的输出文件中获取所有字节:

string path = @"E:\file.txt";
byte[] b1 = File.ReadAllBytes(path);
TripleDESCryptoServiceProvider objDESCrypto = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider objHashMD5 = new MD5CryptoServiceProvider();
byte[] byteHash, byteBuff;
objHashMD5 = null;
objDESCrypto.Key = FinalByteArr;     
objDESCrypto.Mode = CipherMode.ECB;  
objDESCrypto.Padding = PaddingMode.PKCS7;
byteBuff = b1;  
string strDecrypted = ASCIIEncoding.ASCII.GetString(objDESCrypto.CreateDecryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));

奇怪的是,这似乎可行,并且我的文件中的大多数字符都被解密了。解密的文本中有明显的单词和数字。但是大约30%的中间角色混乱了。我已经尝试了所有密码模式和填充模式,但没有任何改善。

由于机密性,我无法发布实际结果,但看起来很像这样:

PK   \2\5\1\5\1\8\2\4\2\0\?n?\Rotate??????????????%??8p??(u??Z??%??8p??(u??Z??%??8p??(u??Z\0\0\0\0\0\0\0\0\0\0\0\RotatePKRotate

即使在最后一行使用UTF-8编码时,中间也会出现乱码,但是我得到的却不是问号,而是很多独特的字符。

那是我的位置。任何建议都会非常有帮助。我非常困惑,因为我希望使用不正确的解密凭据才能解密任何内容。但是有些单词出现(有些没有出现)很奇怪。

0 个答案:

没有答案