gpt4 book ai didi

c++ - 使用 OpenSSL Qt、C++ 解密 DES

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:59 26 4
gpt4 key购买 nike

我正在使用 Qt 库用 C++ 编写一个新版本的程序,并希望保持与用 C# 编写的旧版本的兼容性。

如何将此代码转换为 C++/Qt?

DESCryptoServiceProvider dESCryptoServiceProvider = new DESCryptoServiceProvider();
emoryStream stream = new MemoryStream(Convert.FromBase64String(p0));
CryptoStream stream2 = new CryptoStream(stream, dESCryptoServiceProvider.CreateDecryptor(Encoding.ASCII.GetBytes("B5B126C5"),
Encoding.UTF32.GetBytes("0907427F93EC3A3FCFDFEBE3CB55011")), CryptoStreamMode.Read);
StreamReader streamReader = new StreamReader(stream2);
String text = streamReader.ReadToEnd();

我的实际 Qt/C++ 代码:

        QByteArray encrypted = code.toLatin1();
encrypted = QByteArray::fromBase64(encrypted);

/////////////////////////////////////////////////////////////////////////////////////
DES_cblock key = { 0x9, 0x7, 0x42, 0x7, 0xf9, 0x3e, 0xC3, 0xa3, 0xfC, 0xfd, 0xfe, 0xbe, 0x3c, 0xb5, 0x50, 0x85 };
//this key is too long...

///////////////////////////////////////////////////////////////////////////////////////
DES_cblock iv = { 0xB5, 0xb1, 0x26, 0xc11 };

DES_key_schedule schedule;
unsigned char decrypted[encrypted.size()];

DES_set_odd_parity(&key);
DES_set_key_checked(&key, &schedule);
DES_ncbc_encrypt((unsigned char * )encrypted.constData(), (unsigned char * )decrypted, encrypted.size(), &schedule, &iv, DES_DECRYPT);
unsigned int data_size = 0;

QString text = QByteArray::fromRawData((char * )decrypted, data_size);

当我尝试构建时收到错误:

C:\Project1_Qt\trunk\Core\OldHashDecoder.cpp:1383: error: too many initializers for 'DES_cblock {aka unsigned char [8]}'

请帮忙最好的问候

最佳答案

这里有几个问题正在处理中。

  • 您在评论中指出自己的 key 似乎很长。你需要缩短它。

  • DES key 的长度是固定的,正如评论中正确指出的那样。

  • 你不能在一个字节内修复 0xc11。

至于C#代码,你贴的,我不清楚。我不擅长那种语言,但也许它可能已经默默地为你截断了长度。

关于c++ - 使用 OpenSSL Qt、C++ 解密 DES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20688340/

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