我想自动化 GPG 私钥导出,以便它无需用户交互即可运行。
gpg --export-secret-keys my@email.com
我尝试提供--batch --passphrase-fd 0 参数,密码短语传递为:
--passphrase 'my-passhrase'echo 'my-passphrase' | gpg ... 它不起作用。是否可以在没有用户交互的情况下导出私钥?
我想使用python来创建一个通过公钥加密密码的函数.在用户端我需要安装PGP软件,它将生成密钥对.我想只使用公钥加密和私钥进行解密.问题在于加密功能(如何使用密钥进行加密)以及pgp安装.谁能告诉我这样做的正确方法
谢谢
如显示rpm -qi package?
我真的不想解析输出rpm -qi.我更愿意使用rpm -q --qf,我可以控制格式,并且不会受到未来版本的美学异想天开.
但是我在手册页中找到的唯一有用的标签是SIGPGP,它为我提供了整个签名,而不仅仅是短密钥ID.看到不同:
$ rpm -qi coreutils
Name        : coreutils                    Relocations: (not relocatable)
Version     : 8.4                               Vendor: Fedora Project
Release     : 8.fc13                        Build Date: Tue 20 Jul 2010 05:21:15 AM BRT
Install Date: Tue 03 Aug 2010 01:58:53 PM BRT      Build Host: x86-17.phx2.fedoraproject.org
Group       : System Environment/Base       Source RPM: coreutils-8.4-8.fc13.src.rpm
Size        : 12659257                         License: GPLv3+
Signature   : RSA/SHA256, Tue 20 Jul 2010 03:14:09 PM BRT, Key ID 7edc6ad6e8e40fde
Packager …我们使用Bouncy.Castle C#API进行PGP加密.我绝不是PGP加密专家和各种可用选项.
加密似乎运行正常,但是,当客户端尝试解密时,他说PGP不会输出到文件但只输出到屏幕,因为它标记为"仅供您选择".这是--verbose消息:
pgp --decrypt Client_FileExport_20110510_020011.zip.pgp
  Client_FileExport_20110511_132203.zip.pgp --info verbose
McAfee E-Business Server v8.5 - Full License
(c) 1991-2006 McAfee, Inc.  All Rights Reserved.
Setting temporary directory to C:\DOCUME~1\$963\LOCALS~1\Temp\
Decoding data....
event 1: initial
event 13: BeginLex
event 8: Analyze
File is encrypted.  event 9: Recipients
Secret key is required to read it.
Key for user ID "Client_RSAv4_Key <Bob.Smith@Client.com>"
event 6: Passphrase
You need a pass phrase to unlock your secret key.
Enter pass phrase:
event 23: Decryption
symmetric cipher used: …我希望能够签署一个文件.我的意思是,收件人可以检查该文件确实来自我,并可以查看其内容.有没有简单的方法在C++中做到这一点?
我刚看了一下维基百科上的PGP文章,但他们在"散列,数据压缩,对称 - 密钥加密,最后是公钥加密"的中间失去了我.理想情况下,我想要一个具有功能signString(string, privateykey)且接收者具有功能的库readSignedString(string, publickey).有什么建议吗?
编辑:
我不确定我是否使用正确的方法,所以这就是我想要做的:
我想在我的桌面应用程序中实现一些简单的盗版保护.因此,当用户购买许可证时,我会向他们发送包含其姓名和电子邮件的签名文件.然后,用户安装该文件,应用程序将其读取:它检查签名有效性并显示名称/电子邮件(在"关于"框中).为了确保破解者无法生成这些文件,我需要确保解密文件的密钥与加密文件的密钥不同.有没有简单的方法来实现这个?
我对BouncyCastle和pgp很新.我在互联网上看过很多文章和样本.几乎每个加密样本都包含下面剪切的代码
if (armor) 
        out = new ArmoredOutputStream(out);
似乎我的本地测试通过了护甲和无护甲.我用google搜索但发现很少有用,而ArmoredOutputStream的javadoc只显示这是基本的输出流.
那么有什么区别以及何时使用它?
完整的代码示例:
public static void encryptFile(String decryptedFilePath,
        String encryptedFilePath,
        String encKeyPath,
        boolean armor,
        boolean withIntegrityCheck)            
        throws Exception{
    OutputStream out = new FileOutputStream(encryptedFilePath);
    FileInputStream pubKey = new FileInputStream(encKeyPath);
    PGPPublicKey encKey = readPublicKeyFromCollection2(pubKey);
    Security.addProvider(new BouncyCastleProvider());
    if (armor) 
        out = new ArmoredOutputStream(out);
    // Init encrypted data generator
    PGPEncryptedDataGenerator encryptedDataGenerator =
            new PGPEncryptedDataGenerator(PGPEncryptedData.CAST5, withIntegrityCheck, new SecureRandom(),"BC");
    encryptedDataGenerator.addMethod(encKey);
    OutputStream encryptedOut = encryptedDataGenerator.open(out, new byte[BUFFER_SIZE]);
    // Init compression  
    PGPCompressedDataGenerator compressedDataGenerator = new PGPCompressedDataGenerator(PGPCompressedData.ZIP);
    OutputStream compressedOut = compressedDataGenerator.open(encryptedOut);  
    PGPLiteralDataGenerator …我一直在尝试创建,编码,存储,检索和解码Bouncy Castle PGP公钥。当我尝试重新读回密钥时,得到的输出似乎是错误的,并且出现了EOFException。该密钥将作为字符串存储在数据库中。
从密钥环中提取原始的RSA加密公共密钥,如下所示:
@SuppressWarnings("unchecked")
public PGPPublicKey getPublicKey() {
    PGPPublicKey pk = null;
    Iterator<PGPPublicKey> it = publicKeyRing.getPublicKeys();
    while (pk == null && it.hasNext()) {
        PGPPublicKey key = it.next();
        if (key.isEncryptionKey()) {
            pk = key;
        }
    }
    return pk;
}
它经过编码,ASCII防护并存储为字符串,如下所示:
    PGPPublicKey contactPK = realContact.getPublicKey();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ArmoredOutputStream armored = new ArmoredOutputStream(out);
    contactPK.encode(armored);
    armored.close();
    publicKey = new String(out.toByteArray(), Charset.forName("US-ASCII"));
这给了我一个PGP消息块,在这里我希望有一个PGP公钥块:
----- BEGIN PGP MESSAGE ----- \ n版本:BCPG V1.50 \ n \ nuQINBFO8StkCEACQ4vrDnBTDjEvQkGwrAHuJSBZL8tNLxhZ9B74afhObhLVzW6ZB \ nT3pk / 5XcSPOTvcWd9k1yOKJUabCuF5ixFmMz + niFqUVQTtnl7aqOZ …
我正在尝试使用openpgp.js在JavaScript中为GnuPG加密文件编写示例解密器.
所以我天真地试了一下,甚至没有询问它是否可能.我做了以下页面.
popup.html
<!doctype html>
<!--
-->
<html>
<head>
    <title>Popup</title>
    <script src="openpgp.js"></script>
    <script src="popup.js"></script>
</head>
<body>
    <p>Upload message: </p><input id="message" type="file"/><br>
    <p>Upload secret key: </p><input id="secret" type="file"/><br>
    <p>Secret key password: </p><input id="password" type="password"/><br><br>
    <button id="decrypt">Decrypt</button>
    <p id="output"></p>
    <div id="loadingDiv"></div>
</body>
</html>
popup.js
var message = "";
var secret = "";
function readMessage (e) {
    var file = e.target.files[0];
    if (!file) {
        message = "";
    }
    var reader = new FileReader();
    reader.onload = function (e) {
        message = e.target.result; …我有PGP密钥让我通过提交签名git commit -S.为了签署我的最后一次提交,我做了一个git commit -S --amend --no-edit并签署了我的提交.
现在,我想签署分支中的所有提交filtered.
我试过了: git filter-branch --commit-filter 'git commit -S --amend --no-edit'
它给了我一个错误信息:
$ git filter-branch --commit-filter 'git commit --amend --no-edit -S' HEAD
Rewrite 07b0ac12f5fe1d8963d7ae0ac7fbda50cb6e74a9 (1/10)gpg: skipped "Anubhav Saini <IAmAnubhavSaini@users.noreply.github.com>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object
could not write rewritten commit
另一个问题:提出另一个git commit --amend --no-edit -S结果:
(filter-test)$ git commit …<?php
$res = gnupg_init();
gnupg_clearsignkeys($res);
$key = get_pub_key();// Value pasted below
$publicImp = gnupg_import($res, $key);
gnupg_addsignkey($res, $publicImp['fingerprint']);
echo gnupg_geterror($res); // Prints `get_key failed`
密钥是从https://www.igolder.com/pgp/generate-key/生成的
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: BCPG C# v1.6.1.0
mQENBF3FXV0BCACy/cvfn5oEZQG+Wz8803XvpHVP0NWwIDAuogOsSfDIZX3xBK4s
Ul8y/aXkhPeK4V+NwurNiGqWQXCg3tKX77pfFGo0iBwDQlACmNhxtga/bkDOROx+
O5Ete2olKJ0qVDJTIpA1XMTZK+dFor8oKDWGlYyZ7w1mVxit65fkmzxIdCKrKxGw
9KqHZDkzCwRlpyZ/cQYVPNrx+9GREal2b+XLN3Y9Lbx2OD5FTxO6tLee2XlQdaXJ
R/hetUnei0hoP3J1Zdp99Qh+SX7cGZ+jUcGSdrDEx8q066Q7473xVDJ3Lr0YG53K
EW3lA5z13IkMFn4Yn6taJgkyF/QJtMDZ0xlTABEBAAG0DEhpQGdtYWlsLmNvbYkB
HAQQAQIABgUCXcVdXQAKCRBYbc/NUpqITuYOB/9br/Oc2ahZrbE/GOUOWQc3Yp26
rE+gcp5OjX0WXHsqfxRpVgIb7Si0hr5PPPiCiahS7n44IfZ0CGFcenhv+Eb93h5t
UtC26LRfv1ACTF7tX0QZAeACvB/npB0MMTO/dlbl6eIBjCKHmGMBMBW8WHG39J0V
m5X4GwX6vdTPWQH5ZbpNQirvhLTdYBw6JGtkU++K1gW9kZcncV+3EsRnHIqF5B1G
LnGBYOm9bAdCz2b6J8dkPqjCA9Uw5mvBI5ikB0NruZH8kXynzibnwTpXTc+N3Dsl
5dlRVPh7bIIpGdOVKWqtdnLpNDiY/dQhhmNJ64ZkXOnMibx0qPNYmy3iIgN/
=pvzn
-----END PGP PUBLIC KEY BLOCK-----
关键信息如下所示。
[fingerprint] => AF4A061F20FFFE141AA366FE586DCFCD529A884E
[keyid] => 586DCFCD529A884E
[timestamp] => 1573215581
[expires] => 0
[is_secret] =>
[invalid] =>
[can_encrypt] => 1
[can_sign] => 1
[disabled] =>
[expired] => …pgp ×10
gnupg ×5
encryption ×4
bouncycastle ×2
java ×2
linux ×2
c# ×1
c++ ×1
cryptography ×1
git ×1
javascript ×1
openpgp ×1
openpgp.js ×1
php ×1
public-key ×1
python ×1
rpm ×1
signature ×1