知识随记-----Qt 实用安全技巧:一行代码实现密码加密传输_qt客户端下登录过程密码如何加密
Qt 技巧:利用QCryptographicHash对密码进行加密
文章目录
- Qt 技巧:利用QCryptographicHash对密码进行加密
-
- 项目场景
- 问题描述
- QCryptographicHash介绍
- 代码实现
- 注意事项
- 实现效果展示
- 总结
项目场景
在一个基于 Qt 开发的聊天应用中,用户注册时需要输入密码。为保障用户密码的安全性,前端在将注册信息通过 HTTP 请求发送到服务器前,必须对明文密码进行加密处理,将加密后的密码写入 JSON 对象中进行传输。
这种做法是现代应用安全设计的基本要求。
问题描述
如果直接将用户输入的明文密码通过网络传输,存在极大的安全隐患。攻击者可能通过抓包等手段获取到用户的明文密码,造成用户信息泄露
项目需求:前端必须对密码加密后再发送
加密的方式有很多,今天我们介绍一个Qt 官方的 QCryptographicHash
类对密码进行加密
QCryptographicHash介绍
QCryptographicHash
是一个QT
官方提供的用于加密的类
它可以帮你把任意数据(比如密码、文件内容等)变成一串定长的指纹(哈希值)。这种指纹有个特点:
1.只要输入内容一样,输出的哈希值就一样
2.只要输入内容有一点点不同,输出就完全不一样
3.不能通过哈希值反推出原始内容(不可逆)
官方提供了许多函数接口供我们使用
这是其中的一个函数接口,可以对data
进行加密
QByteArray hash(QByteArrayView data, QCryptographicHash::Algorithm method)
加密的方法有如下:
MD4、MD5、SHA-1:
这些是比较老的哈希算法,现在已经不安全了,不建议用来加密密码
SHA-2 系列(SHA-224、SHA-256、SHA-384、SHA-512)
目前主流的安全哈希算法,推荐用 SHA-256 或更高版本。
SHA-3、Keccak 系列
更现代的哈希算法,安全性更高,适合对安全要求极高的场景
BLAKE2 系列:
速度快,安全性高,是新一代哈希算法,Qt 6.0 以后才支持
代码实现
//global.hextern std::function<QByteArray(const QByteArray&)>Hash;//声明//global.cppstd::function<QByteArray(const QByteArray&)>Hash=[](const QByteArray& pwd){ QByteArray result=QCryptographicHash::hash(pwd,QCryptographicHash::Sha256); return result;};//注册逻辑层调用json_obj[\"passwd\"] = QString((Hash(ui->userpwd_edit->text().toUtf8())).toHex());
注意事项
.toUtf8()
: 将 QString
转换为 UTF-8
编码的 QByteArray
.toHex()
: 将哈希得到的二进制数据转成十六进制字符串
二进制数据直接放进 JSON 可能导致乱码或传输错误。
十六进制字符串只包含 0-9 和 a-f,安全、可读、易于传输和存储
顺序:QString → toUtf8() → Hash → toHex() → QString → 写入 JSON
实现效果展示
- 用户输入密码
123456
后,前端自动完成加密,传输内容为哈希值,而非明文。
总结
在 Qt 项目中,利用 QCryptographicHash
类对敏感信息如密码进行哈希加密,是保障数据安全的有效手段。
通过将用户输入的密码转为 UTF-8
编码后进行 SHA-256
哈希,并将结果转为十六进制字符串
传输,可以大幅降低明文泄露风险。
开发建议:
- 优先选择安全性较高的哈希算法(如 SHA-256、SHA-3 系列)。
- 结合 HTTPS 传输,进一步提升安全性。