https://shazhenyu.blog.csdn.net/article/details/81975970?depth_1-
加密算法
本文提供三种方式来加密解密,都是用Qt本身提供的类,没用外接库。
普通base64加密解密
Qt已经有了最基本的toBase64加密算法,同时提供fromBase64解密算法。
加密
解密
字符大小写加密解密
在普通Base64加解密算法基础上,用大小写加解密算法进行进一步优化。
大小写加解密算法
加密
解密
异或加解密(钥匙加解密)
在普通Base64加解密算法基础上,用异或加解密(钥匙加解密)算法进行进一步优化。
异或加解密(钥匙加解密)算法
加密
解密
以下我自己写的 QT5.12.9:
jcode.h
#ifndef JCODE_H #define JCODE_H #include <QWidget> class JCode { public: public slots: QString toXOR(QString src, const QChar key); QString toUp(QString src); }; #endif // JCODE_H
jcode.cpp
#include "jcode.h" // 加解密都用此方法 QString JCode::toXOR(QString src, const QChar key) { for(int i = 0; i < src.count(); i++) { src[i] = src.at(i).toLatin1() ^ key.toLatin1(); } return src; } QString JCode::toUp(QString src) { for(int i = 0; i < src.count(); i++) { QChar curC = src.at(i); if(curC.isUpper()) { curC = curC.toLower(); } else if(curC.isLower()){ curC = curC.toUpper(); } src[i] = curC; } return src; }
widget.h 加上
#include <jcode.h> ........ public: JCode * j;
加密代码和解密代码:
void Widget::on_cmdEN_clicked() { QString src=ui->lineEdit->text(); QByteArray text = src.toLocal8Bit(); QByteArray by = text.toBase64(); QString str = QString(by); j= new JCode; str=j->toUp(str); //先转换大小写 str = j->toXOR(str, 'f'); // 异或加密(钥匙加密)--- 注意:(这里的key是可以指定为任意字符的,相应的,解密也要同意字符才行) ui->lineEdit_2->setText(str); } void Widget::on_cmdDE_clicked() { j= new JCode; QString str = j->toXOR(ui->lineEdit_2->text(), 'f'); //异或解密(钥匙解密) str=j->toUp(str); //转换大小写 QByteArray text = str.toLocal8Bit(); QByteArray by = text.fromBase64(text); str = QString::fromLocal8Bit(by); // 注意:这里是处理中文用的 ui->lineEdit_3->setText(str); }
发表评论