ccy
8 天以前 2830cce39c0f3e677993bb19c031eb61b43659a3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#ifndef SHORTCRYPTO_H
#define SHORTCRYPTO_H
 
#include <QByteArray>
#include <QString>
 
/**
 * @brief 最短密文加密工具类
 * 流程:明文 → PKCS7填充 → AES-128-CBC加密 → Base85编码
 */
class ShortCrypto
{
public:
    /**
     * @brief 加密
     * @param plaintext 原始明文
     * @param key 16字节密钥(AES-128)
     * @param iv 16字节初始向量,可为空(内部自动补零)
     * @return Base85编码的密文字符串
     */
    static QString encrypt(const QByteArray &plaintext, const QByteArray &key, const QByteArray &iv = QByteArray());
 
    /**
     * @brief 解密
     * @param ciphertext Base85编码的密文
     * @param key 16字节密钥(AES-128)
     * @param iv 16字节初始向量,必须与加密时一致
     * @return 原始明文
     */
    static QByteArray decrypt(const QString &ciphertext, const QByteArray &key, const QByteArray &iv = QByteArray());
 
private:
    // Base85 字符集(RFC 1924 变体,不含引号/逗号/句点/斜杠,避免JSON/XML转义问题)
    static const char *BASE85_CHARS;
 
    static QByteArray base85Encode(const QByteArray &data);
    static QByteArray base85Decode(const QString &text);
};
 
#endif // SHORTCRYPTO_H