Hello, I have a problem with TripleDESCryptoServiceProvider function. I need it to ensure backward compatibility in our app.
The general problem is that 3DES decoder doesn't work properly. If You have any suggestions how to fix my problem please answer
Best regards.
C# code:
CryptoStream cryptoStream = new CryptoStream(memoryStream, new TripleDESCryptoServiceProvider
{
Key = passwordDeriveBytes.GetBytes(24),
IV = passwordDeriveBytes.GetBytes(8)
}.CreateDecryptor(), CryptoStreamMode.Read);
StreamReader streamReader = new StreamReader(cryptoStream);
string result = streamReader.ReadToEnd();
memoryStream.Close();
cryptoStream.Close();
return result
CryptoStream cryptoStream = new CryptoStream(memoryStream, new TripleDESCryptoServiceProvider
{
Key = passwordDeriveBytes.GetBytes(24),
IV = passwordDeriveBytes.GetBytes(8)
}.CreateDecryptor(), CryptoStreamMode.Read);
StreamReader streamReader = new StreamReader(cryptoStream);
string result = streamReader.ReadToEnd();
memoryStream.Close();
cryptoStream.Close();
return result
To copy to clipboard, switch view to plain text mode
QT/C++ Code:
byte *key = passwordDeriveBytes.GetBytes(24); // returns same value as c# function
byte *iv = passwordDeriveBytes.GetBytes(8); // returns same value as c# function
DES_key_schedule ks1, ks2;
/*
QString string1 = "";
for(int i = 0; i < 24; i++){
string1.append(QString::number(key[i], 16) + "-");
}
QString string2 = "";
for(int i = 0; i < 8; i++){
string2.append(QString::number(iv[i], 16) + "-");
}
*/
//////////////////////////// something is wrong /////////////////////////////////////////////////
byte *output = new byte[code1.size()];
DES_set_key((C_Block *)key, &ks1);
DES_set_key((C_Block *)iv, &ks2);
DES_ecb2_encrypt((C_Block *)code1.constData(),(C_Block *)output, &ks1, &ks2, DES_DECRYPT);
return rval;
byte *key = passwordDeriveBytes.GetBytes(24); // returns same value as c# function
byte *iv = passwordDeriveBytes.GetBytes(8); // returns same value as c# function
DES_key_schedule ks1, ks2;
QByteArray code1 = QByteArray::fromHex(code.toUtf8());
code1 = QByteArray::fromBase64(code1);
/*
QString string1 = "";
for(int i = 0; i < 24; i++){
string1.append(QString::number(key[i], 16) + "-");
}
QString string2 = "";
for(int i = 0; i < 8; i++){
string2.append(QString::number(iv[i], 16) + "-");
}
*/
//////////////////////////// something is wrong /////////////////////////////////////////////////
byte *output = new byte[code1.size()];
DES_set_key((C_Block *)key, &ks1);
DES_set_key((C_Block *)iv, &ks2);
DES_ecb2_encrypt((C_Block *)code1.constData(),(C_Block *)output, &ks1, &ks2, DES_DECRYPT);
QString rval = QByteArray::fromRawData((char *)output, code1.size());
return rval;
To copy to clipboard, switch view to plain text mode
Bookmarks