RT,C++QT使用AES128加密得到的结果与C#加密得到的结果不一样
public string AesEncrypt128()
{
// 需要加密的数据
string waitEncrypptData = "abcd"; // 待加密数据
string key = "1234567890123456"; // 密钥,长度为16字节
string iv = "1234567890123456"; // 初始向量,长度为16字节
// 将密钥和IV转换为字节数组(UTF-8编码)
byte[] byteKEY = Encoding.UTF8.GetBytes(key);
byte[] byteIV = Encoding.UTF8.GetBytes(iv);
// 将待加密数据转换为字节数组(UTF-8编码)
byte[] byteContnet = Encoding.UTF8.GetBytes(waitEncrypptData);
// 使用 AES 加密
var _aes = new RijndaelManaged();
_aes.Padding = PaddingMode.PKCS7; // 填充模式
_aes.Mode = CipherMode.CBC; // CBC模式
_aes.KeySize = 128;
_aes.Key = byteKEY; // 设置密钥
_aes.IV = byteIV; // 设置初始化向量
// 创建加密器
var _crypto = _aes.CreateEncryptor(byteKEY, byteIV);
// 执行加密
byte[] encrypted = _crypto.TransformFinalBlock(byteContnet, 0, byteContnet.Length);
_crypto.Dispose();
// 打印加密后的结果
string encryptedBase64 = Convert.ToBase64String(encrypted);
Console.WriteLine("加密后的Base64: " + encryptedBase64);
// 返回加密后的Base64字符串
return encryptedBase64;
}
C#加密后得到的结果是:nzh0d+jfgbdFIHF82Hzv6w==
下面提C++QT中的代码
QString CommonFuncClass::AESEncode()
{
QByteArray content = "abcd";
QString key = "1234567890123456";
QString iv= "1234567890123456";
// 判断值必要的值是否已经存在
if(content.length() == 0 || key.length() == 0 || iv.length() == 0)return "";
// 判断key和iv的长度是否相等
if(key.length() != iv.length())return "";
// 把内容进行16进制转换
QByteArray bytesAarray16 = content.toHex();
// 开始对数据进行加密
QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::CBC,QAESEncryption::PKCS7);
QByteArray encodeText = encryption.encode(bytesAarray16, key.toLocal8Bit(), iv.toLocal8Bit());
QString result = encodeText.toBase64().data();
// 返回字符串
return result;
}
C++QT加密后得到的结果是:tp7xmluTA+IsXKjk4iHX2A==
C++QT使用的是第三方的库,该库专门用于QT加密的
有没有人知道这是为什么呢?