ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

CopyQ 剪贴板数据加密完全指南:内置密码保护与遗留 GnuPG 插件实战

CopyQ 剪贴板数据加密完全指南:内置密码保护与遗留 GnuPG 插件实战 桌面应用【免费下载链接】CopyQClipboard manager with advanced features项目地址https://gitcode.com/gh_mirrors/co/CopyQ点击查看免费下载CopyQ 是一款功能强大的剪贴板管理器会将复制过的内容持久化保存在本地磁盘的标签页中。为了保障这些存储数据的安全CopyQ 自 14.0.0 版本起内置了基于用户密码的整库加密能力不再依赖任何外部软件同时保留了基于 GnuPG 的遗留加密插件用于按需加密单个条目或兼容旧版本。本文将围绕 docs/password-protection.rst 的完整内容结合仓库源码src/common/encryption.cpp、src/gui/encryptionpassword.cpp、plugins/itemencrypted/itemencrypted.cpp深入讲解两种方案的启用步骤、配置参数、底层密码学原理与实操注意事项读完即可为你的剪贴板数据加上一道可靠的密码锁。一、两种加密方案概览CopyQ 提供两条加密路径适用场景截然不同特性内置加密Built-in Encryption遗留加密插件Encryption Plugin引入版本14.0.0 起老版本长期存在14.0.0 起标记为 deprecated外部依赖无依赖 Qt 加密库 QCA 及其 OpenSSL 后端必须安装 GnuPGgpg2/gpg加密范围应用加载的全部标签页自动覆盖配置中指定的标签页也可按需加密单个条目密码输入频率启动时、修改密码时、定时过期时每隔几分钟需重新输入密钥管理DEK/KEK 信封加密支持外部密钥库GnuPG 公私钥体系密钥文件位于配置目录官方建议是新版本一律使用内置加密仅在需要逐条目加密或运行 CopyQ 14.0.0 之前旧版本时才考虑遗留插件。二、内置加密启用与配置2.1 启用步骤打开Preferences首选项对话框勾选Encrypt Tabs选项对应界面文件 src/ui/configtabgeneral.ui 中的checkBoxEncryptTabs配置项定义见 src/common/appconfig.h 的encrypt_tabs默认值为false。勾选后 CopyQ 会弹出密码设置对话框输入新密码并二次确认两次不一致会提示重试最多尝试 3 次见 src/gui/encryptionpassword.cpp密码不允许为空设置成功后CopyQ 会对全部现有标签页数据执行一次性加密reencryptTabs调用位置见 src/gui/mainwindow.cpp。启用后所有由应用加载的标签页数据都会被加密——不存在按标签页或按条目逐一勾选的配置这是与遗留插件最本质的区别。2.2 何时需要输入密码根据官方文档与源码密码在以下场景被要求输入CopyQ 启动时读取加密标签页数据前需要解锁修改加密密码时必须提供当前密码定时要求若在 History历史记录 配置页中启用Require password after an interval间隔一段时间后要求输入密码则到期后应用会周期性请求密码。对应配置项为expire_encrypted_tab_seconds取值被钳制在 0999999 秒见 src/common/appconfig.h。此外禁用加密取消勾选 Encrypt Tabs时同样需要输入密码验证身份见测试用例 src/tests/tests_encryption.cpp。2.3 使用外部密钥库Use external key store为避免每次启动都手动输入密码可勾选Use external key store使用外部密钥库。该选项将密码托管给系统级安全存储对应配置项use_key_store默认值为true见 src/common/appconfig.h。各平台后端如下Windows— Credential Store凭据管理器macOS— Keychain钥匙串Linux— GNOME Keyring 或 KWallet从源码看密码通过KeychainAccess::writePassword/readPassword读写服务名为com.github.hluk.copyq当 CopyQ 以会话session方式运行时键名还会带上会话后缀PasswordForSession-session避免多会话互相干扰见 src/gui/encryptionpassword.cpp。需要特别提醒启用外部密钥库并不会绕过定时密码过期——当 Require password after an interval 开启时周期性提示依然生效。2.4 内置加密与导出数据的边界官方文档明确了一个容易踩坑的注意点内置加密保护的是磁盘上的静态数据data at restexportTab与exportData脚本命令始终写出未加密文件不受加密设置影响从 GUI 执行File文件— Export导出时CopyQ 会弹出可选导出密码对话框——若填写密码导出文件中的标签页数据将以该密码加密不填则明文导出。详细的备份/导出说明见 docs/backup.rst其中也强调GUI 导出可选密码加密而exportData脚本命令不支持该特性始终导出未加密数据若标签页与磁盘目录同步则文件本身不会被导出。三、内置加密的底层原理源码级3.1 DEK/KEK 信封加密架构内置加密采用标准信封加密Envelope Encryption设计核心类为Encryption::EncryptionKey定义见 src/common/encryption.hDEKData Encryption Key随机生成的 256 位数据加密密钥真正用于加密全部标签页数据generateRandomDEK()KEKKey Encryption Key由用户密码经PBKDF2派生而来用于加密包裹DEK磁盘上只保存被 KEK 包裹后的 DEKwrapped_dek.dat与 KEK 派生的随机盐kek_salt.dat文件路径由configurationFilePath(wrapped_dek.dat)/configurationFilePath(kek_salt.dat)决定见 src/common/encryption.cpp。这套架构带来两个关键收益源码注释原话改密码开销极小修改密码只需用新 KEK 重新包裹 DEK无需重新加密全部数据saveKey()只重写两个小文件见 src/common/encryption.cpp安全性更高DEK 是密码学随机密钥强度远高于任何口令派生密钥且每个用户拥有独立随机盐。3.2 具体密码学参数从 src/common/encryption.cpp 的常量定义可以确认完整算法组合对称加密AES-256-CBCPKCS7 填充QCA 名称aes256-cbc-pkcs7密钥派生PBKDF2-SHA1迭代次数100,000输出 32 字节256 位每条消息随机盐16 字节每条消息通过HKDF-SHA256RFC 5869从主密钥派生独立的消息密钥derivePerMessageKey完整性校验对密文负载计算HMAC-SHA25632 字节标签解密时用常数时间比较constantTimeEquals验证可有效防篡改见 src/common/encryption.cpp文件格式魔数CPQ1用于标识新版格式并拒绝旧版遗留格式decryptAuthenticated会拒绝不以CPQ1开头的负载。3.3 数据落盘的健壮性设计写入采用QSaveFile原子提交避免写一半损坏Unix 系平台上密钥文件权限被收紧为仅属主可读写ReadOwner | WriteOwner见 src/common/encryption.cppsaveKey()在改写前会先备份wrapped_dek.dat/kek_salt.dat.backup后缀写完后用新密码反向解包校验 DEK 一致任何一步失败都会自动回滚备份见 src/common/encryption.cpp。3.4 密码输入途径与测试验证源码支持多种密码来源PasswordSource交互式密码对话框QInputDialog密码模式输入环境变量COPYQ_PASSWORD适合自动化/无头场景见 src/gui/encryptionpassword.cpp系统密钥库上文所述。仓库测试 src/tests/tests_encryption.cpp 与 src/tests/tests_encryption_expire.cpp 覆盖了启用加密、写入/重载/重启后解密读取、禁用加密时要求密码、密码过期周期等场景。命令行层面可用copyq config encrypt_tabs true/false直接开关该配置测试代码RUN(config encrypt_tabs true, ...)即此用法。四、遗留加密插件Legacy Encryption Plugin自 14.0.0 起该插件已被官方标记为deprecated已弃用。仅推荐两类用户使用需要逐条目加密或运行 CopyQ14.0.0 之前旧版本。官方同时给出两条明确警告插件依赖GnuPGgpg2引入外部密钥管理复杂性与版本兼容问题密码必须每隔几分钟重新输入一次使用体验较差。4.1 安装插件与 GnuPG在Configuration 对话框的 Items 配置页中启用Encryptionitem 插件仓库实现见 plugins/itemencrypted/itemencrypted.cpp插件 ID 为itemencrypted名称 Encryption。若系统未安装 GnuPG插件配置页会提示先安装Windows可用 Chocolatey 安装 Gpg4winchoco install gpg4winLinux安装gpg命令行工具一般由gnupg软件包提供个别发行版包名不同。从源码看插件会依次探测gpg2、gpg可执行文件并要求主版本号 ≥ 2GpgExecutable构造与findGpgExecutable()见 plugins/itemencrypted/itemencrypted.cpp若检测不到 GnuPG插件状态为GpgNotInstalled加密标签页将无法加载loadItems中会提示 GnuPG must be installed to view encrypted tabs.。4.2 生成密钥与设置密码加密标签页与条目前必须先生成 GnuPG 公私钥文件。在插件配置页点击Generate New Keys...按钮并等待——源码中该操作通过gpg --batch --gen-key生成RSA 4096 位、仅用于加密Key-Usage: encrypt的密钥真实姓名固定为copyq见startGenerateKeysProcessplugins/itemencrypted/itemencrypted.cpp密钥环文件存放在 CopyQ 配置目录下。密钥生成后若尚未设置密码点击Change Password...按钮完成设置最后一步在插件配置中填入要加密的标签页名列表每行一个与标签页名精确匹配支持助记键与/路径写法匹配逻辑见canSaveItems()plugins/itemencrypted/itemencrypted.cpp。若只想逐条目加密可跳过此步。点击OK确认关闭 Configuration 对话框即可生效。4.3 保护整个标签页按CtrlT新建标签页标签页名称必须与插件配置中填写的名称之一完全一致该标签页的数据在保存时会经gpg --encrypt加密文件头为CopyQ_encrypted_tab v2见ItemEncryptedSaver::saveItems()plugins/itemencrypted/itemencrypted.cpp。此后打开该标签页会提示输入密码无需每次都输间隔一段时间才要求一次。若输错密码或取消了密码提示可点击标签页上的Reload重新加载按钮再次输入密码4.4 保护单个条目在不加密的标签页中可添加带快捷键的菜单/工具栏动作实现单条目加密打开Command 对话框F6点击Add添加从列表中选择Encryption类命令用OK确认关闭对话框。插件向命令系统注册了 4 个内置命令见commands()plugins/itemencrypted/itemencrypted.cpp命令菜单路径快捷键底层脚本Encrypt需要 GnuPGItems — Encryption — EncryptCtrlLplugins.itemencrypted.encryptItems()DecryptItems — Encryption — DecryptCtrlLplugins.itemencrypted.decryptItems()Decrypt and CopyItems — Encryption — Decrypt and CopyCtrlShiftLplugins.itemencrypted.copyEncryptedItems()Decrypt and PasteItems — Encryption — Decrypt and PasteEnterplugins.itemencrypted.pasteEncryptedItems()加密时选中条目中所有非 CopyQ 内部格式不以application/x-copyq-前缀开头的数据被pack序列化后经 GnuPG 加密以application/x-copyq-encrypted格式源码常量mimeEncryptedData存储解密时反向unpack还原见encryptItem/decryptItem/encryptItems/decryptItemsplugins/itemencrypted/itemencrypted.cpp。加密条目在界面上以挂锁图标标识ItemEncrypted控件显示IconLock。4.5 密钥文件与跨机器共享插件配置页会提示若要在其他电脑或会话中共享加密条目需要保留密钥环文件存放于 CopyQ 配置目录。gpg 2.1 以下版本需要同时保存公钥环与私钥环.pub/.secgpg 2.1 及以上仅需公钥环文件。源码通过--export-secret-key导出私钥并以属主可读写权限落盘见exportGpgKey()plugins/itemencrypted/itemencrypted.cpp。请务必妥善保管这些文件。五、常见问题与最佳实践新旧方案如何选运行 14.0.0 及以上版本、加密目标是全部剪贴板历史时一律使用内置加密只有需要单条目选择性加密才考虑遗留插件。密码忘记了怎么办内置加密的密钥文件wrapped_dek.dat/kek_salt.dat被 KEK 包裹丢失密码即丢失 DEK加密数据无法恢复——请务必保管好密码或依赖外部密钥库use_key_store。导出的数据默认是明文脚本exportTab/exportData永远输出未加密文件GUI 导出可自愿设置导出密码请根据数据敏感度自行决定。自动化场景可通过环境变量COPYQ_PASSWORD在无人值守环境下提供密码内置加密或用命令行copyq config encrypt_tabs true/false管理开关。备份加密数据直接复制数据/配置目录即可完成备份但备份与恢复前务必完全退出 CopyQ见 docs/backup.rst。六、参考资源官方文档原文docs/password-protection.rst备份与导出说明docs/backup.rst内置加密核心实现src/common/encryption.cpp、src/common/encryption.h密码提示与密钥库逻辑src/gui/encryptionpassword.cpp、src/common/keychainaccess.cpp配置项定义src/common/appconfig.h遗留加密插件plugins/itemencrypted/itemencrypted.cpp、plugins/itemencrypted/itemencrypted.h加密相关测试src/tests/tests_encryption.cpp、src/tests/tests_encryption_expire.cpp赞分享桌面应用【免费下载链接】CopyQClipboard manager with advanced features项目地址https://gitcode.com/gh_mirrors/co/CopyQ点击查看免费下载相关推荐YOLOv5 2025革新轻量化突破与全场景落地加速YOLOv5 2025革新轻量化突破与全场景落地加速 导语 2025年YOLOv5通过动态损失函数与多尺度特征融合技术实现精度与效率双重突破在边缘计算与行业CLI开发工具Ditto数据库和加密功能保障你的剪贴板数据安全终极指南Ditto剪贴板管理工具不仅帮你记录所有的复制粘贴历史更重要的是通过强大的数据库存储和加密机制来保护你的隐私数据。这款Windows剪贴板扩展工具采用SQLi桌面应用剪贴板数据永不丢失CopyQ备份与恢复完全指南剪贴板数据永不丢失CopyQ备份与恢复完全指南 你是否曾因系统崩溃、软件升级或误操作丢失过重要的剪贴板历史记录作为程序员、内容创作者或日常办公用户我们每天桌面应用上一篇EspoCRM企业级开源CRM系统架构深度解析与实战部署指南下一篇攻克React认证难题Redux-Auth-Wrapper 3.x全攻略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表