gpt4 book ai didi

c# - 无法在 .NET : wrong first 4 bytes 中重现基于 ATL 的数据解密

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:09 26 4
gpt4 key购买 nike

这是 C++ 代码:

CCryptMD5Hash md5;
CCryptProv cprov;
PCWSTR pszPassword = <password>;
BYTE* data = <array of bytes>;
ATL::CCryptDerivedKey m_CryptKey;

md5.Initialize( cprov );
md5.AddData(reinterpret_cast<const BYTE*>(pszPassword), wcslen(pszPassword) * sizeof(wchar_t));

m_CryptKey.Initialize( cprov, md5, CALG_DES);

std::vector<BYTE> buff(data, data + size);
DWORD cbBufSize = buff.size();
m_CryptKey.Decrypt(TRUE, &buff.front(), &cbBufSize));

它成功地将字节数组解码为类似“ABC-DEF-2\ZXCVBNMHOHUH,2020100”的字符串。

这是我正在尝试编写的相应 .NET 代码:

byte[] salt = new byte[0];
byte[] input = <array of bytes>;
byte[] pwd = Encoding.Unicode.GetBytes(<password>);

DESCryptoServiceProvider des = new DESCryptoServiceProvider();
PasswordDeriveBytes pdb = new PasswordDeriveBytes(pwd, salt);
des.Key = pdb.CryptDeriveKey("DES", "MD5", 0, des.IV);

MemoryStream ms = new MemoryStream(input);
CryptoStream ds = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Read);

StreamReader sr = new StreamReader(ds, Encoding.Unicode);
string s = sr.ReadToEnd();

它的输出字符串是“몶뛛跨DEF-2\ZXCVBNMHOHUH,2020100”。因此,前四个字符被错误解码。改变盐会使这些字符不同。

由于 C++ 代码中没有盐,我什至无法考虑尝试它的可能值(value)。但是所有简单的方法都行不通。

有人可以帮忙吗?

最佳答案

是否可以将零值传递到 des.IV 的 C# 代码中?

您可以使用 SetIV 在 C++ 代码中设置等效的 CBC IV

m_CryptKey.SetIV(...);

关于c# - 无法在 .NET : wrong first 4 bytes 中重现基于 ATL 的数据解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4305952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com