知识随记-----Qt 实用安全技巧:一行代码实现密码加密传输

Qt 技巧:利用QCryptographicHash对密码进行加密

项目场景

在一个基于 Qt 开发的聊天应用中,用户注册时需要输入密码。为保障用户密码的安全性,前端在将注册信息通过 HTTP 请求发送到服务器前,必须对明文密码进行加密处理,将加密后的密码写入 JSON 对象中进行传输。

这种做法是现代应用安全设计的基本要求


问题描述

如果直接将用户输入的明文密码通过网络传输,存在极大的安全隐患。攻击者可能通过抓包等手段获取到用户的明文密码,造成用户信息泄露

项目需求:前端必须对密码加密后再发送

加密的方式有很多,今天我们介绍一个Qt 官方的 QCryptographicHash 类对密码进行加密


QCryptographicHash介绍

QCryptographicHash是一个QT官方提供的用于加密的类
它可以帮你把任意数据(比如密码文件内容等)变成一串定长的指纹(哈希值)。这种指纹有个特点:

1.只要输入内容一样,输出的哈希值就一样
2.只要输入内容有一点点不同,输出就完全不一样
3.不能通过哈希值反推出原始内容(不可逆)

官方提供了许多函数接口供我们使用

在这里插入图片描述

这是其中的一个函数接口,可以对data进行加密

QByteArray hash(QByteArrayView data, QCryptographicHash::Algorithm method)

加密的方法有如下:

常量描述Qt 版本
QCryptographicHash::Md4生成 MD4 哈希值-
QCryptographicHash::Md5生成 MD5 哈希值-
QCryptographicHash::Sha1生成 SHA-1 哈希值-
QCryptographicHash::Sha224生成 SHA-224 哈希值 (SHA-2)Qt 5.0+
QCryptographicHash::Sha256生成 SHA-256 哈希值 (SHA-2)Qt 5.0+
QCryptographicHash::Sha384生成 SHA-384 哈希值 (SHA-2)Qt 5.0+
QCryptographicHash::Sha512生成 SHA-512 哈希值 (SHA-2)Qt 5.0+
QCryptographicHash::Sha3_224 / RealSha3_224生成 SHA3-224 哈希值Qt 5.1+
QCryptographicHash::Sha3_256 / RealSha3_256生成 SHA3-256 哈希值Qt 5.1+
QCryptographicHash::Sha3_384 / RealSha3_384生成 SHA3-384 哈希值Qt 5.1+
QCryptographicHash::Sha3_512 / RealSha3_512生成 SHA3-512 哈希值Qt 5.1+
QCryptographicHash::Keccak_224生成 Keccak-224 哈希值Qt 5.9.2+
QCryptographicHash::Keccak_256生成 Keccak-256 哈希值Qt 5.9.2+
QCryptographicHash::Keccak_384生成 Keccak-384 哈希值Qt 5.9.2+
QCryptographicHash::Keccak_512生成 Keccak-512 哈希值Qt 5.9.2+
QCryptographicHash::Blake2b_160生成 BLAKE2b-160 哈希值Qt 6.0+
QCryptographicHash::Blake2b_256生成 BLAKE2b-256 哈希值Qt 6.0+
QCryptographicHash::Blake2b_384生成 BLAKE2b-384 哈希值Qt 6.0+
QCryptographicHash::Blake2b_512生成 BLAKE2b-512 哈希值Qt 6.0+
QCryptographicHash::Blake2s_128生成 BLAKE2s-128 哈希值Qt 6.0+
QCryptographicHash::Blake2s_160生成 BLAKE2s-160 哈希值Qt 6.0+
QCryptographicHash::Blake2s_224生成 BLAKE2s-224 哈希值Qt 6.0+
QCryptographicHash::Blake2s_256生成 BLAKE2s-256 哈希值Qt 6.0+

MD4、MD5、SHA-1
这些是比较老的哈希算法,现在已经不安全了,不建议用来加密密码

SHA-2 系列(SHA-224、SHA-256、SHA-384、SHA-512)
目前主流的安全哈希算法,推荐用 SHA-256 或更高版本。

SHA-3、Keccak 系列
更现代的哈希算法,安全性更高,适合对安全要求极高的场景

BLAKE2 系列
速度快,安全性高,是新一代哈希算法,Qt 6.0 以后才支持


代码实现

//global.h
extern std::function<QByteArray(const QByteArray&)>Hash;//声明

//global.cpp
std::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 传输,进一步提升安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值