1+1=10

记记笔记,放松一下...

Qt与加解密库

简单记录一下。

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 InterfaceCryptoAPI, MS-CAPICAPI)。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

Qt crypto