序言
只是记录下一个功能的实现
AES主要在于密钥,密钥长度、加密方式和填充方式,当然要注意的是QString和QByteArray的某些转化
库下载地址
密钥长度、加密方式和填充方式
//密钥长度
enum Aes {
AES_128,
AES_192,
AES_256
};
//加密方式
enum Mode {
ECB,
CBC,
CFB,
OFB
};
//填充方式
enum Padding {
ZERO,
PKCS7,
ISO
};
作者提供的使用方法之一
QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB , QAESEncryption::ISO);
QByteArray input("HELLO AES");
QByteArray key = QString("your-string-key").toLocal8Bit();
//QByteArray key("your-byte-key");
QByteArray encodedText = encryption.encode(input, key);
QByteArray decodedText = encryption.decode(encodedText, key);
QString decodedString = QString(QAESEncryption::RemovePadding(decodedText,QAESEncryption::ISO));
qDebug() << decodedString;
Qt AES加密
QFile file("./thisIsTestFile");
if (!file.open(QIODevice::ReadWrite | QIODevice::Text)){
qDebug() << "open error" << file.error();
}
QTextStream stream(&file);
QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ISO);
QByteArray input("The wind is less windy");
QByteArray key("你自定义的密钥"); //注意密钥的长度,长了记得更改AES_128
QByteArray encodedText = encryption.encode(input, key);
stream << encodedText.toBase64();
stream.flush();
file.close();
Qt AES解密
QFile file("./thisIsTestFile");
if (!file.open(QIODevice::ReadWrite | QIODevice::Text)){
qDebug() << "open error" << file.error();
}
QAESEncryption encryption(QAESEncryption::AES_128, QAESEncryption::ECB, QAESEncryption::ISO);
QByteArray key("你自定义的密钥"); //注意密钥的长度,长了记得更改AES_128
QByteArray readInfo = file.readLine();
QByteArray decodedText = encryption.decode(QByteArray::fromBase64(readInfo), key); //这时解密后的内容后面会带有某些不明字符
QString decodedString = QString(QAESEncryption::RemovePadding(decodedText,QAESEncryption::ISO)); //使用这条会去掉后面多余的字符
qDebug() << "decodedText" << decodedString.toLocal8Bit();
file.close();
注意
1、只使用QByteArray来进行AES加密解密,若要使用QString,QByteArray在加/解密前/后再与QString进行转化,因为AES是逐个字节来加解密,而不是逐个字符;
2、若要与C#的AES加解密相兼容,要注意C#的存放在文件里的是否是toBase64后的string,若是这样的话,需要使用静态函数QByteArray::fromBase64(需解密的字节数组),将其返回的QByteArray拿起解密即可;
3、需要注意文件的编码,当然如果并没有使用中文的即可忽略。