Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
git-crypt — Git中的透明文件加密 | Kitploit
工具/GitHubGitHub/agwa/git-crypt
身份验证与授权加密/解密工具数据泄露密码学秘密检测供应链安全
GitHubagwa/git-crypt

git-crypt

Git中的透明文件加密

查看仓库
9.8k5381111个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

git-crypt - 在git中实现透明文件加密

git-crypt 能够在 git 仓库中实现文件的透明加密和解密。你选择保护的文件在提交时会自动加密,在检出时会自动解密。git-crypt 允许你自由共享一个同时包含公开和私有内容的仓库。git-crypt 会优雅降级,因此没有密钥的开发者仍然可以克隆和提交包含加密文件的仓库。这样你可以将秘密材料(如密钥或密码)与代码存放在同一个仓库中,而无需锁定整个仓库。

git-crypt 由 Andrew Ayer ([email protected]) 编写。更多信息请访问 https://www.agwa.name/projects/git-crypt。

构建 git-crypt

请参阅 INSTALL.md 文件。

使用 git-crypt

配置一个仓库以使用 git-crypt:

root@kitploit:~
cd repo
git-crypt init

通过创建 .gitattributes 文件来指定要加密的文件:

root@kitploit:~
secretfile filter=git-crypt diff=git-crypt
*.key filter=git-crypt diff=git-crypt
secretdir/** filter=git-crypt diff=git-crypt

与 .gitignore 文件类似,它可以匹配通配符,并且应被检入仓库。更多关于 .gitattributes 的信息请参见下文。确保你不会意外加密 .gitattributes 文件本身(或其他 git 文件如 .gitignore 或 .gitmodules)。确保你的 .gitattributes 规则在添加敏感文件之前已经到位,否则这些文件将不会被加密!

使用 GPG 与他人(或与自己)共享仓库:

root@kitploit:~
git-crypt add-gpg-user USER_ID

USER_ID 可以是密钥 ID、完整指纹、电子邮件地址或任何能唯一标识 GPG 公钥的内容(请参阅 gpg 手册页中的“如何指定用户 ID”)。注意:git-crypt add-gpg-user 会在仓库根目录的 .git-crypt 目录中添加并提交一个 GPG 加密的密钥文件。

或者,你可以导出一个对称密钥,然后必须安全地传递给协作者(不需要 GPG,也不会向仓库添加任何文件):

root@kitploit:~
git-crypt export-key /path/to/key

在克隆包含加密文件的仓库后,使用 GPG 解锁:

root@kitploit:~
git-crypt unlock

或者使用对称密钥:

root@kitploit:~
git-crypt unlock /path/to/key

这就是你需要做的全部——在 git-crypt 设置完成(无论是通过 git-crypt init 还是 git-crypt unlock)后,你可以正常使用 git——加密和解密都是透明进行的。

当前状态

最新版本的 git-crypt 是 0.8.0,于 2025-09-23 发布。git-crypt 的目标是无错误且可靠,即不应崩溃、故障或泄露你的机密数据。然而,它尚未达到成熟状态,意味着在文档、功能性和易用性方面还有待完善。此外,在 1.0 版本之前可能会引入不向后兼容的更改。

安全性

git-crypt 比其他透明 git 加密系统更安全。git-crypt 使用 AES-256 在 CTR 模式下加密文件,并采用从文件的 SHA-1 HMAC 衍生出的合成初始化向量(IV)。这种操作模式在确定性选择明文攻击下具有可证明的语义安全性。这意味着尽管加密是确定性的(这是 git 区分文件是否更改所必需的),但它不会泄露除两个文件是否相同之外的任何信息。其他透明 git 加密方案使用 ECB 或带有固定 IV 的 CBC,这些系统不具备语义安全性,会泄露信息。

局限性

git-crypt 依赖于 git 过滤器,而过滤器在设计之初并未考虑加密。因此,对于仓库中大部分或全部文件的加密,git-crypt 并非最佳工具。git-crypt 真正擅长的场景是你的仓库大部分内容公开,但只有少数文件(例如名为 *.key 的私钥文件,或包含 API 凭证的文件)需要加密。如果你需要加密整个仓库,建议考虑使用 git-remote-gcrypt 等系统(注意:本文不对 git-remote-gcrypt 的安全性做出任何背书)。

git-crypt 不加密文件名、提交信息、符号链接目标、gitlink 或其他元数据。

git-crypt 不会隐藏文件是否更改、文件的长度或两个文件是否相同的事实(参见上面的“安全性”部分)。

git-crypt 不支持撤销之前授予的对加密仓库的访问权限。这既适用于多用户 GPG 模式(没有与 add-gpg-user 对应的 del-gpg-user 命令),也适用于对称密钥模式(不支持密钥轮换)。这是因为在历史数据的背景下,这是一个固有的复杂问题。例如,即使密钥在历史的某个点被轮换,拥有先前密钥的用户仍然可以访问仓库的先前历史记录。此问题在 https://github.com/AGWA/git-crypt/issues/47 中有更详细的讨论。

经过 git-crypt 加密的文件不可压缩。即使对加密文件进行最小的更改,git 也需要存储整个更改后的文件,而不是仅存储差异。

尽管 git-crypt 使用 SHA-1 HMAC 保护单个文件内容,但只有整个仓库受到防篡改保护时,才能安全使用 git-crypt(能够篡改仓库的攻击者可以更改你的 .gitattributes 文件以禁用加密)。如有必要,请使用 git 的特性(如签名标签)而不是仅依赖 git-crypt 来保证完整性。

经过 git-crypt 加密的文件无法通过 git-apply 应用补丁,除非补丁本身也是加密的。要生成加密的补丁,请使用 git diff --no-textconv --binary。或者,你可以在 git 之外使用 patch 命令应用明文补丁。

git-crypt 在某些第三方 git GUI 中无法可靠工作,例如 Atlassian SourceTree 和 GitHub for Mac。文件可能处于未加密状态。

Gitattributes 文件

.gitattributes 文件在 gitattributes(5) 手册页中有详细说明。文件模式格式与 .gitignore 使用的格式相同(见 gitignore(5) 手册页),但需要注意的是,仅指定目录(例如 /dir/)不足以加密其下的所有文件。

另外请注意,模式 dir/* 不匹配 dir/ 子目录下的文件。要加密整个子树 dir/,请使用 dir/**:

root@kitploit:~
dir/** filter=git-crypt diff=git-crypt

.gitattributes 文件不能加密,因此请确保通配符不会意外匹配到它。如有必要,你可以像这样将 .gitattributes 排除在加密之外:

root@kitploit:~
.gitattributes !filter !diff
下载工具