标签: gnupg

如何使用 GnuPG 加密字符串?

如何从命令行使用 gpg 加密给定的字符串?我将公钥存储在一个名为 pubkey.pub 的文件中,我想我可以简单地用类似的东西来做到这一点。

gpg --import "path/to/pubkey.pub" --encrypt "my string to encrypt"
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。

背景:我必须使用 PHP exec 命令来加密给定的文本,因为我没有在服务器上安装 PHP 模块本身。

php encryption gnupg pgp exec

3
推荐指数
1
解决办法
3621
查看次数

如何检查 ubuntu 上是否安装了 gnupg,如果没有安装,如何运行 shell 脚本来安装它?

#! /bin/bash


if which gnupg >/dev/null; then 
    echo "Installed"
else
    echo "Not installed" #If not installed

echo "Installing..."
sudo apt-get install gnupg #installation

fi
Run Code Online (Sandbox Code Playgroud)

你有什么主意吗?当我运行它时,它显示尚未安装,但它尝试更新它。结果它说:gnupg 已经是最新版本了。0 已升级,0 已新安装,0 已删除,46 未升级。

bash shell ubuntu gnupg

3
推荐指数
1
解决办法
8142
查看次数

Maven Central 工件的预期 GPG 用户 ID?

我正在经历在 Maven Central 上获取公司工件的(看似复杂的)程序。然后我进入了GPG签名部分,进入了一个充满困惑和难题的新世界。GPG 有如此多的选择,并且尚不清楚签署公司工件的合理做法应该是什么。

假设 Acme 想要将一个工件发布org.example.acme:foobar:1.0.0到 Maven Central。他们应该使用什么用户 ID 来签名?什么子键?该密钥如何与用户的个人密钥分开?

让我一一解答所有疑问,让您了解为什么它令人困惑。

  • 我应该使用什么电子邮件地址来访问 Acme?我应该使用吗admin@acme.example.com?该身份应该是 Acme 还是 Acme 的一个部门?或者应该只有个人签署工件才能在 Maven 上发布?
  • 评论呢?一位消息人士表示,我们应该完全忽略评论。我应该使用吗"Acme (software) software@acme.example.com"?要不就"Acme acme@acme.example.com"
  • 好吧,也许你会说这并不重要,所有这些都是基于意见的,我可以使用任何对我的公司有用的东西——很好。那么如何将公司 ID 和个人 ID 分开呢?我可以在同一台计算机的同一个密钥环上拥有 Acme 的密钥和 John Doe 的单独密钥吗?那么我在发布工件时如何区分它们?所有示例似乎都假设您使用单一身份。
  • 我应该使用子项吗?我应该为不同的部门创建不同的子项吗?或者相同子项的不同身份?或者是什么?
  • 我应该让我的密钥过期吗?还是只是主键?或者只是子项?

我可以继续说下去……尝试总结一下,所有示例似乎都假设 1) 用户的密钥环上只安装了一个用户 ID,2) 每个签署其工件的人都是个人,而不是公司。

签署组织的 Maven 工件的预期方法是什么?用户如何将组织的密钥与用户的个人密钥分开管理?

sign gnupg pgp openpgp maven

3
推荐指数
1
解决办法
395
查看次数

为什么源树在我尚未配置签名时寻找 gpg 密钥?

我在 Mac 上下载了sourcetree 应用程序,并向其中添加了本地 git 存储库。每当我尝试隐藏某些内容或提交某些内容时,sourcetree 都会抛出与 gpg 相关的错误。错误示例如下。

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree stash save test-stash 
/Applications/SourceTree.app/Contents/Resources/bin/gpg: line 2: gpg2: command not found
error: gpg failed to sign the data
Cannot save the current index state
Completed with errors, see above
Run Code Online (Sandbox Code Playgroud)

我无法找出此错误的原因。据我记得,我还没有为任何类型的签名配置项目或 sourcetree 应用程序。

如果您能帮助我解决此问题,那将会有很大帮助。

git gnupg sourcetree

3
推荐指数
1
解决办法
992
查看次数

无法通过 python3 从 AWS Secrets Manager 正确访问 GPG 公钥/私钥

我正在使用 python-gnupg 包来创建 GPG 公钥和私钥。我将生成的私钥存储在 AWS Secrets Manager 中,如下所示。

Key: private_key
value: -----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)

lQO+BF37qDIBCADXq0iJVRYFb43+YU8Ts63hDgZl49ZNdnDVhd9H0JMXRHqtPqt9
bbFePPN47NRe6z6GsbPaPmDqEE9l3KjFnSZB/yCii+2wHZR0ij2g3ATbiAbOoQQy
I6bbUADmHtcfIJByoXVoDk489nUPt84Xyp1lHiBfCtUmq4w62Okq6InlRhxjxcEx
VvSXaCY8YnEXUAgNGpvcKHDejGS9V4djh7r7lgJ/Y+3Xb2eepOfiaCx2Cn8ZMI0q
7eWH0MmSeR4ueOLeb79ZKjpJraBfV91XplgHHiM18oECWWwsQCFiwi1GVOLpX6Fh
HIoUyaRAW2vZyFcNnO7iLbetie6fE884lfHxABEBAAH+AwMCO+Qoh7o3GWVga9f2
gHEeuGGH4KB3aspQZt/zwKpx7YlDB/uLd4q7JQt35nIH6pfYdMwgQt001CRhsGvX
QVKIkvipQvJZgCO8Nix7xYCukH0cI4TXD7S9BmRNMCPi74+Q1J3cDfKHCseynMNF
GzBeCDx6LW3CVfKKs0Mc2ecSl0c8gxaPDi3AfACRMefEAuVQyo82qJKjpI+O/Yik
z40C5OgK0XfetKstxcH4B0bx0o/PrUpYFM/gHHgFkbpVg5citcvFY4VcEkWryVcg
yF0qBPXP0OKBtCUU1ZGiCwRJy8iGd/dOOICcSCfMNy+jzzM3FSVzei69x7MYt3xu
IzCsmHpDvpdL7tiDDHgwajZeFFPTzf7Ic90K6TapQ3H59xPMxnL9K5o9rP1glRY0
8e4zYjYxg9A6Yl3K5zdqs+M1A3Os70HUlWZXZ4LQNcidPd1rhnPnm9eXkyV2ScXl
dE38aOA5pnrL0WZUM3/OLAToMP6h4rjw9WLqqgWlrl6yz9bhZrfRxlhZaEtNs1bi
pgrmPK/a5fK++BjMSuA94EkXTVNjKWNQBzcmrff27M1TMwN+34NWj3dk/a1gyflP
QZgK3MT+0GaMCcvy1EoZ87ffLQrWwFJOw5nT83yG7VBbuerSEk/tk30bxmYN6HzO
zvQgSjDiiH+ANXVupnzDjjBREmH6V1Hv+7Q0vrjKQHd3eYvKJpAWfFr9kO8DzKck
ZkSMj487SjlHbh33z1yupuwAtjyYQ5tN1adSlDa92t0Q08udnFDQtxXEnL6rw/Du
llEuCEVC9UYcNwwQGMsGXQBFFfj1389WHr0hkSOvyS1nPiIku5kNXDhSWq7/okTS
FwnCt+wbZa6TWbXjwKzHzu4LOarV1s8DnYHKNH6HHIqsVR2oJuIuqhyREAqjeP/T
3bQjQXV0b2dlbmVyYXRlZCBLZXkgPG1laHVsQHBoZWFhLm9yZz6JATkEEwECACMF
Al37qDICGy8HCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRDO+i9CZ70SvqMn
CACCmdzqZW68j1E45XTHz3fvqdft6fXOyrlMuDdcH2y7Zrl5JS7PlCeHzIcsSMlH
wDYpCG8km7nwZsnWqKsOXFWq1nq/j7Kv5AzR7UmPzTw/1HFSVhIFA0ZZMHAnwp7Y
bcAT+ssvo4To9CjzRp/ZI1k26RFXPWuXETa41DBIVz13Ss4SIaf7UG9FQ55o+2BA
TP48yCQqktiWOoZ0rV1ALSFlE4Gs3UWHcYxxCABA0JB4+FuCRfB8QMreLwFb47wc
dIitbVl0mQx5IXCkqhJKqR62rRy25Put4xnPhXGtXqfoYDVYvYvlsl/FA35cX+Z1
QODnLq/jQ7ZPdaFC7cFqxztk
=RvGa
-----END PGP PRIVATE KEY BLOCK-----

Key: passphrase
Value: secret123

Run Code Online (Sandbox Code Playgroud)

我想要做的就是从 AWS Secrets Manager 中提取密钥和值对并导入密钥,然后解密文件。

众所周知,JSON 不会解释多行值中的换行符,因此 GPG import_keys 无法导入私钥。如果我只是读取具有相同私钥的本地文件,那么就没问题。请告诉我这个问题是否有任何解决方法?

try:
    secretkey = self.get_secret(secretName)
    if not secretkey:
        self.logger.error("Empty secret key")
        exit(0) …
Run Code Online (Sandbox Code Playgroud)

json gnupg python-3.x aws-secrets-manager

3
推荐指数
1
解决办法
4555
查看次数

Emacs + GPG + pinentry.el 用于身份验证

我很难为 Emacs 设置pinentry来进行身份验证(比如说 github)。使用 GPG 和 pinentry 来签署提交已经可以了。我在 emacs 中使用 magit 进行版本控制,每次我提交一些内容时,迷你缓冲区中都会弹出 pinentry,我输入密码并对提交进行签名。都好。

不过我也使用 GPG 进行身份验证。我使用 GPG设置和身份验证子密钥,并设置 SSH 来使用它。如果我从 tty 执行此操作,它也会起作用。只是不是从 Emacs 内部。该问题与环境变量有关$GPG_TTY。如果我尝试将某些内容推送到 GH,则迷你缓冲区中的 pinentry 不会弹出。相反,它会等待并最终说我没有权限。

我应该提到我使用 emacs,更具体地说是 EXWM 作为我的窗口管理器。如果我退出 emacs,我会在 TTY 中看到 pinentry-encurses 对话框。如果我在 emacs 中打开另一个终端,同时按下它,它将在该终端中打开 pinentry-ncurses 对话框,而不是在迷你缓冲区中弹出 pinentry.el。

几天来我一直在谷歌搜索并尝试不同的方法,但没有运气。

〜/.gnupg/gpg-agent.conf:

allow-emacs-pinentry
allow-loopback-pinentry
default-cache-ttl 600
max-cache-ttl 7200
enable-ssh-support
Run Code Online (Sandbox Code Playgroud)

〜/.gnupg/gpg.conf:

use-agent
Run Code Online (Sandbox Code Playgroud)

〜/ .bash_配置文件:

# GPG related
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
export GPG_TTY=$(tty)
#gpgconf --launch gpg-agent
Run Code Online (Sandbox Code Playgroud)

我在 emacs 中的 pinentry 配置:

;; Enable loopback so …
Run Code Online (Sandbox Code Playgroud)

git authentication emacs gnupg

3
推荐指数
1
解决办法
2913
查看次数

gpg — 仅将内容直接解密到标准输出

secret.txt.gpg我有要解密的文件,以便内容存储在如下变量中:

\n
TXT=$(gpg --decrypt secret.txt.gpg)\n
Run Code Online (Sandbox Code Playgroud)\n

但这样会添加很多额外的gpg: \xe2\x80\xa6行,其中包含有关密钥等的信息,如下所示:

\n
gpg: encrypted with 4096-bit RSA key, ID xxxx, created xxxx\n  "xx xx (xx) <xx@xx.xx>"\ngpg: Signature made xxx\ngpg:                using RSA key xxx\n\xe2\x80\xa6\nSecret Message\n
Run Code Online (Sandbox Code Playgroud)\n

顺便一提:

\n
gpg -d secret.txt.gpg > out.txt\n
Run Code Online (Sandbox Code Playgroud)\n

只是将内容写入文件。

\n

如何仅捕获内容而不将其写入文件?

\n

更新

\n

尽管@Roger的答案更好并解释了原因,但我可以使用以下方法来实现:

\n
TXT=$(gpg --decrypt secret.txt.gpg > /dev/stdout)\n
Run Code Online (Sandbox Code Playgroud)\n

bash gnupg

3
推荐指数
1
解决办法
5667
查看次数

如何在 AWS Lambda 函数中使用 gnupg

我有一个 GPG 加密文件的本地 python 代码。一旦将文件添加到触发此 lambda 的 AWS S3,我需要将其转换为 AWS Lambda。

我的本地代码

import os
import os.path
import time
import sys
gpg = gnupg.GPG(gnupghome='/home/ec2-user/.gnupg')

path = '/home/ec2-user/2021/05/28/'
ptfile = sys.argv[1]

with open(path + ptfile, 'rb')as f:
        status = gpg.encrypt_file(f, recipients=['user@email.com'], output=path + ptfile + ".gpg")

print(status.ok)
print(status.stderr)
Run Code Online (Sandbox Code Playgroud)

当我将此文件作为python3 encrypt.py file.csv执行并且结果为file.csv.gpg时,效果非常好

我试图将其移至 AWS Lambda 并在 file.csv 上传到 S3 时调用。

import json
import urllib.parse
import boto3
import gnupg
import os
import os.path
import time

s3 = boto3.client('s3')

def lambda_handler(event, context): …
Run Code Online (Sandbox Code Playgroud)

python gnupg amazon-s3 aws-lambda python-3.8

3
推荐指数
1
解决办法
1万
查看次数

gpg仅加密文件夹中的某些文件

一个文件夹中有15个文件,都带有gz扩展名.我想加密其中的12个并跳过3个文件.有没有办法做到这一点?所有文件名都不同,可能也可能不以同一个字母开头.目前正在做:

gpg -r 'name' --encrypt-files  $source/*.gz
Run Code Online (Sandbox Code Playgroud)

假设文件名是apple.gz,alabama.gz,butter.gz,cake.gz,dog.gz,eagle.gz,oregon.gz,somename.gz;

我想用一个gpg命令加密除alabama.gz和somename.gz之外的所有文件; 我怎样才能做到这一点?

bash gnupg

2
推荐指数
1
解决办法
7933
查看次数

GPG自动解密密码传递

我们从第三方收到GPG加密文件.我正在修改一个C#程序,它找到加密文件,解密它们并删除加密文件.这一切都有效,除了在解密部分它提示一个phassphrase; 我知道密码,它在输入时有效.我需要在命令中传递密码,因此提示永远不会出现.

string CommandText = string.Format("echo {0}|gpg.exe --keyring {1} --secret-keyring {2} --batch --yes --passphrase-fd 0 -o {3} -d {4}",
                passPhrase, publicKeyRingPath, secretKeyRingPath, outputFullPath, encryptedFilePath);
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

    string CommandText = string.Format("gpg.exe --keyring {1} --secret-keyring {2} --batch --yes --passphrase {0} -o {3} -d {4}",
    string CommandText = string.Format("gpg.exe --keyring {1} --secret-keyring {2} --batch --yes --passphrase-fd {0} -o {3} -d {4}",
Run Code Online (Sandbox Code Playgroud)

以及其他几个变种.

这是运行GnuPG for Windows 2.1.0.57899

如果问题出在其他地方,那么主要是由我的前任编写的一堆代码:

public bool decryptInputFile(string encryptedFilePath, string outputFullPath, out string message)
{
    message = "decryptInputFile: Started";
    try
    {
        ProcessStartInfo …
Run Code Online (Sandbox Code Playgroud)

c# windows passphrase gnupg

2
推荐指数
1
解决办法
2570
查看次数