Существует следующая функция decrpytion, показанная в проекте .dll.
private static string Decrypt(string val)
{
byte[] cryIV = { 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 };
byte[] cryKey;
byte[] crystr = Convert.FromBase64String(val);
byte[] decstr = new byte[crystr.Length - 1];
RijndaelManaged rijndael = new RijndaelManaged();
RijndaelManaged cryRdm = new RijndaelManaged();
MemoryStream ms = new MemoryStream(crystr);
ICryptoTransform cryTrD;
cryKey = Encoding.UTF8.GetBytes("abc".GetHashCode().ToString());
cryTrD = cryRdm.CreateDecryptor(cryKey, cryIV);
CryptoStream cs = new CryptoStream(ms, cryTrD, CryptoStreamMode.Read);
try
{
cs.Read(decstr, 0, decstr.Length);
}
catch (CryptographicException exc)
{
throw exc;
}
ms.Close();
cs.Close();
return ((string)Encoding.UTF8.GetString(decstr)).Replace("\0", string.Empty);
}
Функция отлично работает как часть основного проекта, но когда я использую .dll в другом проекте, функция выдает ошибку Padding is invalid and cannot be removed
.
Я сузил его до строки
cryKey = Encoding.UTF8.GetBytes("abc".GetHashCode().ToString());
, которая возвращает разные значения в зависимости от проекта ссылки.
Как я могу это сделать, когда .dll используется во втором проекте?
Я пытался установить crKey
на значения, которые назначаются, когда функция работает , например:
cryIV = { 50, 50, 50, 50, 50, 50, 50, 50 };
, но это тоже не сработало.
Я также мог воспроизвести поведение на втором компьютере.
Я использую Visual Studio 2019. Я Думаю, что проблема могла быть вызвана разными настройками проекта, поскольку код отлично работает с одной и той же .dll, если вызывается из одного проекта.