简单记录一下。
Qt 自身
Qt的QSSlScoket支持完整的TLS操作,但是Qt自己没有暴露加解密的函数。
哈希算法
Qt提供了计算摘要的哈希函数类 QCryptographicHash
它支持的哈希算法:
- Md4、Md5
- Sha1
- Sha224、Sha256、Sha384、Sha512
- Sha3_224、Sha3_256、Sha3_384、Sha3_512
Kecccak_{224、256、384、512}
Blake2b_{160、256、384、512}
、Blake2s_{128、160、224、256}
其他
QByteArray 提供基本的base64和hex编解码。
Qt 第三方库
Qt-AES
- https://github.com/bricke/Qt-AES
一个小巧的 对称加密算法 AES 类。 支持AES - 128/192/256 位。
QCA
- https://github.com/KDE/qca
这是KDE的加解密库。它支持
- 哈希算法(QCA::Hash)
- SHA-0、SHA-1
- MD2、MD4、MD5
- SHA-224、SHA-256、SHA-384、SHA-512
- RIPEMD160
- Whirlpool
- 对称加密(QCA::Cipher)
- BlowFish
- DES、Triple DES
- AES(128、192、256)
- CAST5
- 非对称加密
- RSA
- DSA
- Diffie-Hellman
以及X509证书、SSL/TLS、PGP 等。
Qt-Secret
- https://github.com/QuasarApp/Qt-Secret
支持非对称加密算法 RSA 以及对称加密算法 AES。(其AES通过前述 Qt-AES实现)
其他
还有不少对 OpenSSL、Botan的封装,比如
- https://github.com/bru74lw1z4rd/QSimpleCrypto
- https://github.com/russkiy78/QtOpenssl3RSA
- https://github.com/daodaoliang/NEncryptionKit
C/C++ 库
OpenSSL
- https://www.openssl.org/
OpenSSL是Qt的老朋友了。
不过现在Qt在Windows下有了schannel,在MacOS下有了 Secure Transport。OpenSSL不再是QSslSocket的必选项了。
botan
- https://botan.randombit.net/
QtCreator 曾使用botan来实现ssh协议,它将botan 1.x.x 做成一个大的
.h
和.cpp
文件。在QtCreator4.8时,升级到botan2.x,且不再将其合并成一个大的.cpp
文件使用。但是在QtCreator4.9时,官方又从源码中彻底删除了botan。
crypto++
- https://www.cryptopp.com/
- https://github.com/weidai11/cryptopp
Windows系统库
这部分东西似乎很乱,网上资料很多都是新旧两套混用。
Windows 的 Win32 接口提供了密码学的相关 API。分为 Cryptography API和 Cryptography API: Next Generation(简称CNG)。CNG 被设计为 Cryptography 的下一代替代品,
CryptoAPI
- CyptoAPI:Cryptographic Application Programming Interface,CryptoAPI, MS-CAPI 或CAPI)。CryptoAPI函数使用加密服务提供商 (CSP) 执行加密和解密,并提供密钥存储和安全性。 这些 CSP 是独立的模块。
- CSP:Cryptographic Service Providers。官网提供有一个常常的CSP的列表。
Windows NT 4.0引入此功能。对应头文件 wincrypt.h,动态库 crypt32.dll。
- https://learn.microsoft.com/zh-cn/windows/win32/seccrypto/cryptoapi-system-architecture
- https://learn.microsoft.com/zh-cn/windows/win32/seccrypto/microsoft-cryptographic-service-providers
从Windows Vista开始,开始推出 CNG。
CNG
Cryptography API: Next Generation (CNG) is the long-term replacement for the CryptoAPI. CNG is designed to be extensible at many levels and cryptography agnostic in behavior.
Windows Vista引入 CNG。对应头文件 bcrypt.h 和 ncrypt.h,动态库 bcrypt.dll 和 ncrypt.dll。
它支持哈希算法、对称加密、非对称加密。官网列表。
- https://learn.microsoft.com/en-us/windows/win32/seccng/cng-algorithm-identifiers
- https://learn.microsoft.com/en-us/windows/win32/seccng/encrypting-data-with-cng
- https://learn.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptencrypt
- https://stackoverflow.com/questions/58419870/how-to-use-bcrypt-for-rsa-asymmetric-encryption
CNG包括两部分 API:它们分别以 B 开头和 N 开头
- BCrypt
- NCrypt
参考
- https://api.kde.org/qca/html/index.html
- https://botan.randombit.net/
- https://zhuanlan.zhihu.com/p/543708425?utm_id=0
- https://jpassing.com/2020/02/19/certificate-enrollment-crypto-api-cng-and-other-windows-apis/
- https://github.com/qt/qtbase/tree/dev/src/plugins/tls
- https://github.com/vladp72/hcrypt