ccy
6 天以前 a9eb746e1ad16dc040916316a87e4ebb44261c37
shortcrypto.h
@@ -6,23 +6,25 @@
/**
 * @brief 最短密文加密工具类
 * 流程:明文 → PKCS7填充 → AES-128-CBC加密 → Base85编码
 * 流程:明文 → PKCS7填充 → AES-128-CBC加密 → 纯字母编码(52字符集)
 * V3许可密钥另用无填充变体(encryptRaw),输出纯大写26字符集
 */
class ShortCrypto
{
public:
    /**
     * @brief 加密
     * @param plaintext 原始明文
     * @brief 加密(V2设备ID等,含PKCS7填充)
     * @param plaintext 原始明文(任意长度)
     * @param key 16字节密钥(AES-128)
     * @param iv 16字节初始向量,可为空(内部自动补零)
     * @return Base85编码的密文字符串
     * @return 纯字母编码的密文字符串(A-Z/a-z,52字符集,密文每48字节→68字符)
     * @note 解密端自动回退兼容早期Base85版密文
     */
    static QString encrypt(const QByteArray &plaintext, const QByteArray &key, const QByteArray &iv = QByteArray());
    /**
     * @brief 解密
     * @param ciphertext Base85编码的密文
     * @brief 解密(V2设备ID等,含PKCS7验证)
     * @param ciphertext 纯字母编码的密文(兼容早期Base85版密文,自动回退)
     * @param key 16字节密钥(AES-128)
     * @param iv 16字节初始向量,必须与加密时一致
     * @return 原始明文
@@ -54,12 +56,19 @@
    // V3 密文字符集:纯大写字母,不含数字/小写/特殊字符(26字符集,16字节→28字符)
    static const char *V3_CHARS;
    // V2 密文字符集:大小写字母,不含数字/特殊字符(52字符集,48字节→68字符)
    static const char *BASE52_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);
    // 变长版解码:返回去掉前导零的最短字节序(供长度不固定的V2密文使用,
    // 调用方需自行补齐对齐;52字符集下真值至多丢失1个前导零字节)
    static QByteArray baseNDecodeVar(const QString &text, const char *alphabet, int base);
};
#endif // SHORTCRYPTO_H