标签: pgp

Bouncycastle PGP解密并验证

我正在尝试使用java BouncyCastle库解密和验证PGP消息,但遇到了问题,抱怨PartialInputStream的过早结束.

我知道加密工作正常,因为我可以在命令行上使用gpg解密和验证使用加密函数创建的消息.

这是代码:

public static void signEncryptMessage(InputStream in, OutputStream out, PGPPublicKey publicKey, PGPPrivateKey secretKey, SecureRandom rand) throws Exception {
        out = new ArmoredOutputStream(out);

        PGPEncryptedDataGenerator encryptedDataGenerator = new PGPEncryptedDataGenerator(new BcPGPDataEncryptorBuilder(PGPEncryptedData.AES_256).setWithIntegrityPacket(true).setSecureRandom(rand));
        encryptedDataGenerator.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(publicKey));

        OutputStream compressedOut = new PGPCompressedDataGenerator(PGPCompressedData.ZIP).open(encryptedDataGenerator.open(out, 4096), new byte[4096]);

        PGPSignatureGenerator signatureGenerator = new PGPSignatureGenerator(new BcPGPContentSignerBuilder(publicKey.getAlgorithm(), HashAlgorithmTags.SHA512));
        signatureGenerator.init(PGPSignature.BINARY_DOCUMENT, secretKey);
        signatureGenerator.generateOnePassVersion(true).encode(compressedOut);

        OutputStream finalOut = new PGPLiteralDataGenerator().open(compressedOut, PGPLiteralData.BINARY, "", new Date(), new byte[4096]);

        byte[] buf = new byte[4096];
        int len;
        while ((len = in.read(buf)) > 0) {
            finalOut.write(buf, 0, len);
            signatureGenerator.update(buf, 0, …
Run Code Online (Sandbox Code Playgroud)

java encryption bouncycastle sign pgp

10
推荐指数
2
解决办法
2万
查看次数

PGP/GPG签名的Python代码

我想(PGP/GPG)签署python代码.是的,我已经阅读过这个以及许多其他关于保护混淆 python代码的网站 - 这一切都不是我想要的.我不想混淆代码.我希望客户和用户能够看到代码,他们可以修改代码,复制代码并进行衍生工作,我希望将软件置于GPLv3下.但我想拥有"已签名"的插件,因此在执行过程中它们可能会受到信任.

这在Python中可行吗?检查gpg签名后我可以导入库吗?什么是容易的:检查文件的gpg签名,然后通过导入加载,否则引发异常.但这只适用于单文件导入,而不是目录python模块.

很明显,如果客户在程序中更改了GPG密钥,或者在检查算法中自己删除了一些行,则一切都消失了 - 但这不是问题.他可以做任何他想做的事 - 但这很愚蠢.他想要的是值得信赖.我想让他通过将其复制到"插件"目录中来添加第三方插件,并让程序检查插件的"可信度" - 然后导入它.(所以他可以运行没有签名的插件,但是他有自己的风险.)

python import gnupg pgp

10
推荐指数
1
解决办法
3624
查看次数

在C++中签名/认证文本文件的最简单方法?

我想验证我的程序在我客户的站点上运行创建的文本日志文件是否已被篡改.你怎么建议我这样做?我在这里搜索了一堆谷歌,但找不到我的答案.谢谢!

编辑:看完所有建议到目前为止这里是我的想法.我想保持简单,因为客户不是那种电脑,我认为将盐嵌入二进制文件是安全的.我将继续使用关键字"salt checksum hash"等搜索一个简单的解决方案,并在找到一个后回发到这里.

c++ encryption certificate pgp

9
推荐指数
2
解决办法
1715
查看次数

使用Python进行PGP签名的多部分电子邮件

我目前正在尝试为我的小型电子邮件发送脚本(使用Python 3.x和python-gnupg模块)添加PGP签名支持.

签署消息的代码是:

gpg = gnupg.GPG()
basetext = basemsg.as_string().replace('\n', '\r\n')
signature = str(gpg.sign(basetext, detach=True))
if signature:
    signmsg = messageFromSignature(signature)
    msg = MIMEMultipart(_subtype="signed", micalg="pgp-sha1",
    protocol="application/pgp-signature")
    msg.attach(basemsg)
    msg.attach(signmsg)
else:
    print('Warning: failed to sign the message!')
Run Code Online (Sandbox Code Playgroud)

(这basemsgemail.message.Message类型.)

messageFromSignature函数为:

def messageFromSignature(signature):
    message = Message()
    message['Content-Type'] = 'application/pgp-signature; name="signature.asc"'
    message['Content-Description'] = 'OpenPGP digital signature'
    message.set_payload(signature)
    return message
Run Code Online (Sandbox Code Playgroud)

然后我将所有需要的标题添加到消息(msg)并发送它.

这适用于非多部分消息,但在basemsg多部分(multipart/alternativemultipart/mixed)时失败.

手动验证相应文本的签名是否有效,但Evolution和Mutt报告签名是错误的.

任何人都能指出我的错误吗?

python email gnupg pgp digital-signature

9
推荐指数
1
解决办法
3829
查看次数

在ruby中运行系统命令并与之交互

我需要在命令行上运行一个命令,要求用户响应.万一它有助于命令是:

gpg --recipient "Some Name" --encrypt ~/some_file.txt
Run Code Online (Sandbox Code Playgroud)

当你运行它时,它警告某事然后问:

无论如何使用这个键?(Y/N)

回答'y'让它正确完成.我一直在尝试使用open4 gem,但我无法正确指定'y'.这是我尝试过的:

Open4::popen4(cmd) do |pid, stdin, stdout, stderr|
  stdin.puts "y"
  stdin.close

  puts "pid        : #{ pid }"
  puts "stdout     : #{ stdout.read.strip }"
  puts "stderr     : #{ stderr.read.strip }"
end
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我正在做什么甚至可能?

ruby command-line pgp command-line-interface

9
推荐指数
1
解决办法
1889
查看次数

客户端Web应用程序中的GPG(PGP)解密

如何在Web应用程序的客户端解密某些加密数据?

例如

  • 数据以加密方式存储在服务器上.
  • 它是使用公共GPG密钥加密的.
  • 服务器将加密的内容发送给客户端.
  • 客户端需要使用本地私钥解密它.

可能我可以将私钥传递给浏览器并使用Javascript来解密数据.

javascript encryption web-applications gnupg pgp

9
推荐指数
1
解决办法
7531
查看次数

Go的openpgp包中的PGP密钥装甲编码

我正在尝试使用Go的openpgp/armor包以ASCII装甲编码打印PGP公钥.

我期望的输出:

-----BEGIN PGP PUBLIC KEY BLOCK-----

<base64 encoded bytes of public key>
<checksum>
-----END PGP PUBLIC KEY BLOCK-----
Run Code Online (Sandbox Code Playgroud)

我得到的输出:

-----BEGIN PGP PUBLIC KEY BLOCK-----

<first part of base64 encoded bytes of public key>
Run Code Online (Sandbox Code Playgroud)

它只打印公钥的第一部分.

公钥是从本地密钥环文件获取的,并按如下方式处理:

keyRingFileBuffer, err := os.Open(keyRingFilePath)
if err != nil {
    log.Fatal(err)
}
defer keyRingFileBuffer.Close()

keyRing,err := openpgp.ReadKeyRing(keyRingFileBuffer)
if err != nil {
    log.Fatal(err)
}

for _, k := range keyRing {
    w, _ := armor.Encode(os.Stdout, openpgp.PublicKeyType, nil)
    k.PrimaryKey.Serialize(w)
}
Run Code Online (Sandbox Code Playgroud)

我不正确地使用包裹吗?关于如何跟踪这个(在我看来)错误输出的原因的任何想法?

gnupg pgp go openpgp public-key-encryption

9
推荐指数
1
解决办法
405
查看次数

private-keys-v1.d目录中的哪个私钥文件属于哪个密钥?

从GnuPG 2.1(https://www.gnupg.org/faq/whats-new-in-2.1.html)开始,GnuPG的私钥存储在private-keys-v1.d子目录中。在尝试创建密钥等之后,我发现*.key此目录中有几个文件:

$ ls .gnupg/private-keys-v1.d
xxxxxxxxxxxxxxxxxxxxxxxxxxxx.key
yyyyyyyyyyyyyyyyyyyyyyyyyyyy.key
zzzzzzzzzzzzzzzzzzzzzzzzzzzz.key
...
Run Code Online (Sandbox Code Playgroud)

文件名(x +,y +和z +)看起来像指纹等,但不等于我现有的任何公钥。如何找到此目录中的哪个密钥文件属于哪个可见的密钥gpg --list-keys

gnupg pgp

9
推荐指数
1
解决办法
1198
查看次数

如何使用 gpg 验证加密和签名的文件?

我试图更好地了解 gpg 发生了什么。

如果您有文件并签名: gpg --sign file.txt

您可以通过以下方式进行验证: gpg --verify file.txt.gpg

当您获得成功的输出时: gpg: Signature made...

但是当您签署并加密文件时: gpg --encrypt --sign -r test@email.com file.txt

然后--verify在我得到的加密文件上运行:gpg: verify signatures failed: Unexpected error

我知道我可以调用--decrypt文件,它会验证和解密它,但是如果我只想验证怎么办?

gnupg pgp

9
推荐指数
1
解决办法
9312
查看次数

如何将(二进制).key PGP文件转换为ASCII装甲文件?

有没有办法将(二进制).key文件转换为ASCII装甲.asc文件?

有一篇文章似乎暗示文件扩展名无关紧要,文件内容是相同的:与PGP相比,b/w .pkr和.key文件的区别是什么?

pgp

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