BGM小组信息加密工具

null

目前为 2024-11-13 提交的版本。查看 最新版本

// ==UserScript==
// @name         BGM小组信息加密工具
// @namespace    http://tampermonkey.net/
// @version      1.5
// @author       Sedoruee
// @match        https://bgm.tv/group/topic/*
// @description null
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_deleteValue
// @require      https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js
// @license MIT

// ==/UserScript==

(function() {
    'use strict';

    const defaultKeys = {
        "bangumi": "默认密钥",
        "sedoruee": "Sedoruee"
    };

    let currentKey = "bangumi"; // 默认密钥

    // 从存储中读取密钥,如果没有则使用默认密钥
    let keys = GM_getValue('keys', defaultKeys);

    // 加密函数 (使用 AES 加密)
    function encrypt(text, key) {
        return CryptoJS.AES.encrypt(text, key).toString();
    }

    // 解密函数 (使用 AES 解密)
    function decrypt(ciphertext, key) {
        try {
            const bytes = CryptoJS.AES.decrypt(ciphertext, key);
            return bytes.toString(CryptoJS.enc.Utf8);
        } catch (e) {
            return null; // 解密失败返回 null
        }
    }

    // 自动解密页面中的加密内容,并应用样式
    function autoDecryptPage() {
        const encryptedRegex = /\[加密\](.*?)\[topic409567\]/g;
        document.body.innerHTML = document.body.innerHTML.replace(encryptedRegex, (match, p1) => {
            for (const key in keys) {
                const decryptedText = decrypt(p1, key);
                if (decryptedText) {
                    return decryptedText;
                }
            }
            return match; // 所有密钥都解密失败,保留原始加密文本
        });
    }

    function createButtons() {
        const submitBtn = document.querySelector('#submitBtnO');
        if (!submitBtn) return;

        const keySelect = document.createElement('select');
        for (const key in keys) {
            const option = document.createElement('option');
            option.value = key;
            option.text = keys[key];
            if (key === currentKey) {
                option.selected = true;
            }
            keySelect.appendChild(option);
        }
        keySelect.addEventListener('change', () => {
            currentKey = keySelect.value;
        });

        const encryptBtn = document.createElement('button');
        encryptBtn.innerText = '加密';
        encryptBtn.style.marginLeft = '10px';
        encryptBtn.addEventListener('click', (event) => {
            event.preventDefault();
            const contentTextarea = document.querySelector('#content');
            if (contentTextarea) {
                const originalText = contentTextarea.value;
                const encryptedText = '[加密]' + encrypt(originalText, currentKey) + '[topic409567]';
                contentTextarea.value = encryptedText;
            }
        });


        const addKeyBtn = document.createElement('button');
        addKeyBtn.innerText = '添加密钥';
        addKeyBtn.style.marginLeft = '10px';
        addKeyBtn.addEventListener('click', () => {
            let newKeyInput = prompt("请输入新的密钥和备注,以|分隔 (例如: mykey|我的密钥):");
            if (newKeyInput) {
                let [newKey, newKeyDesc] = newKeyInput.split("|");
                if (!newKey) return alert("密钥不能为空!");
                newKey = newKey.trim(); // 去除空格
                newKeyDesc = (newKeyDesc || newKey).trim(); // 去除空格
                keys[newKey] = newKeyDesc;
                GM_setValue('keys', keys);
                location.reload(); // 刷新页面
            }
        });

        const deleteKeyBtn = document.createElement('button');
        deleteKeyBtn.innerText = '删除密钥';
        deleteKeyBtn.style.marginLeft = '10px';
        deleteKeyBtn.addEventListener('click', () => {
            let keyToDelete = prompt("请输入要删除的密钥:", currentKey);
             if (keyToDelete && keys[keyToDelete]) {
                if (confirm(`确定要删除密钥 ${keys[keyToDelete]} (${keyToDelete}) 吗?`)) {
                   delete keys[keyToDelete];
                   GM_setValue('keys', keys);
                   location.reload(); // 刷新页面以更新密钥选择框
                }
             } else {
                alert("密钥不存在!");
             }
        });


        submitBtn.parentNode.insertBefore(keySelect, submitBtn.nextSibling);
        submitBtn.parentNode.insertBefore(encryptBtn, keySelect.nextSibling);
        submitBtn.parentNode.insertBefore(addKeyBtn, encryptBtn.nextSibling);
        submitBtn.parentNode.insertBefore(deleteKeyBtn, addKeyBtn.nextSibling);


    }

    // 页面加载时自动解密
    window.addEventListener('load', () => {
        autoDecryptPage();
        createButtons();
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址