| | |
| | | */ |
| | | static QByteArray decrypt(const QString &ciphertext, const QByteArray &key, const QByteArray &iv = QByteArray()); |
| | | |
| | | /** |
| | | * @brief 无填充加密(V3专用) |
| | | * @param plaintext 原始明文,长度必须是16的倍数(16字节明文 → 16字节密文) |
| | | * @param key 16字节密钥(AES-128) |
| | | * @return 纯大写字母编码的密文字符串(A-Z,26字符集),16字节明文恰好输出28字符 |
| | | * @note 不做PKCS7填充:16字节明文若走填充会扩成32字节 |
| | | * @note 若想缩短到25字符,把V3_CHARS换成"A-Z0-9"并把base改为36即可 |
| | | */ |
| | | static QString encryptRaw(const QByteArray &plaintext, const QByteArray &key); |
| | | |
| | | /** |
| | | * @brief 无填充解密(V3专用) |
| | | * @param ciphertext 纯大写字母编码的密文(兼容早期Base85/纯字母版V3密文,自动回退) |
| | | * @param key 16字节密钥(AES-128) |
| | | * @return 原始明文(长度与密文一致),完整性由上层CRC校验保证 |
| | | */ |
| | | static QByteArray decryptRaw(const QString &ciphertext, const QByteArray &key); |
| | | |
| | | private: |
| | | // Base85 字符集(RFC 1924 变体,不含引号/逗号/句点/斜杠,避免JSON/XML转义问题) |
| | | static const char *BASE85_CHARS; |
| | | |
| | | // V3 密文字符集:纯大写字母,不含数字/小写/特殊字符(26字符集,16字节→28字符) |
| | | static const char *V3_CHARS; |
| | | |
| | | static QByteArray base85Encode(const QByteArray &data); |
| | | static QByteArray base85Decode(const QString &text); |
| | | |
| | | // 任意进制的大数编解码(整段字节序作为大整数,前导零以alphabet[0]补齐固定位数) |
| | | static QByteArray baseNEncode(const QByteArray &data, const char *alphabet, int base); |
| | | static QByteArray baseNDecode(const QString &text, const char *alphabet, int base); |
| | | }; |
| | | |
| | | #endif // SHORTCRYPTO_H |