我需要编写从FTP位置获取PGP加密文件并处理它们的代码.这些文件将使用我的公钥加密(不是我还有一个).显然,我需要一个可以在Microsoft Access中使用的PGP库.你能推荐一款易于使用的产品吗?
我正在寻找一些不需要大量PKI知识的东西.理想情况下,可以轻松生成一次性私钥/公钥对,然后有一个简单的解密例程.
什么是修订控制PGP加密文本文件的好方法?
目标是
仅在本地存储库(工作副本)和远程存储库(逻辑上为"中央"存储库)中存储PGP加密(最好使用ASCII装甲)文本文件.
通过PGP加密(例如,通过使用GnuPG)在存储修订历史的存储库中保护隐私
尽可能减少存储开销
如果只是一个版本控制PGP加密和ASCII装甲文本文件,因为它的整个内容将在每次解密进行编辑时更改,然后在存储并提交到版本控制存储库之前进行加密,差异将大致与文件成比例大小,即使解密文本的变化很小,也会快速增长.
有没有人举过一个例子,说明如何使用C#和Bouncy Castle库中的PGP密钥对txt文件进行签名。不加密文件,仅添加签名。
我试图使用一个名为PgpDecrypt的类来解密客户端给出的这个示例文件.但是当代码出现在这一行时:
Stream clear = pbe.GetDataStream(privKey);
Run Code Online (Sandbox Code Playgroud)
它返回一个错误: 异常解密密钥
这是我的解密代码:
PgpDecrypt test = new PgpDecrypt(string.Concat(pathh, "TestDecryptionFile"),
string.Concat(pathh, "mypgpprivatekey.key"),
"mypassphrase",
@"d:/test/",
string.Concat(pathh, "clientpublickey.key"));
FileStream fs = File.Open(string.Concat(pathh, "TestDecryptionFile"), FileMode.Open);
test.Decrypt(fs, @"d:\test\");
Run Code Online (Sandbox Code Playgroud)
我使用BouncyCastle作为.NET的第三方库.
任何解决这个问题的想法都会有很大的帮助.提前致谢!
我正在尝试从 GnuPG 使用 BouncyCastle C# 库创建的密钥环获取公共 PGP 密钥。我已经使用以下代码使其半工作。问题是它输出的公钥长度大约是真实公钥的一半,而且最后几个字节也不同。我只是想得到真正的钥匙。
更新:值得注意的是,我生成的密钥环只有一个公钥,但我从 bouncycastle 中得到了两个。我还发现,如果将第二个密钥插入到从末尾开始的前几个字符中,它会生成几乎原始的密钥。只有末尾的几个字符不同。那么为什么有两个钥匙,为什么会发生这种情况呢?我缺少什么?
GnuPG 密钥环不兼容吗?
另请注意,此处显示的代码仅获取最后一个密钥。我现在将每个添加到列表中。
这是我的代码:
public static string ReadKey(string pubkeyFile)
{
string theKey;
Stream fs = File.OpenRead(pubkeyFile);
//
// Read the public key rings
//
PgpPublicKeyRingBundle pubRings = new PgpPublicKeyRingBundle(PgpUtilities.GetDecoderStream(fs));
fs.Close();
foreach (PgpPublicKeyRing pgpPub in pubRings.GetKeyRings())
{
pgpPub.GetPublicKey();
foreach (PgpPublicKey pgpKey in pgpPub.GetPublicKeys())
{
//AsymmetricKeyParameter pubKey = pgpKey.GetKey();
//SubjectPublicKeyInfo k = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pubKey);
//byte[] keyData = k.ToAsn1Object().GetDerEncoded();
//byte[] keyData = k.GetEncoded();
byte[] keyData = pgpKey.GetEncoded();
theKey = Convert.ToBase64String(keyData);
}
} …
Run Code Online (Sandbox Code Playgroud) 看来,虽然PGPPublicKey
该类提供了一种isEncryptionKey()
方法来确定公钥的算法是否可以用于加密目的(RSA_GENERAL
, RSA_ENCRYPT
, ELGAMAL_GENERAL
, ELGAMAL_ENCRYPT
),但仅凭这一点还不足以选择有效的加密子密钥。
有关于存储在数据包中的公钥的预期用途的信息,如 GnuPG packet.h 中所示:
41 /* Usage flags */
42 #define PUBKEY_USAGE_SIG GCRY_PK_USAGE_SIGN /* Good for signatures. */
43 #define PUBKEY_USAGE_ENC GCRY_PK_USAGE_ENCR /* Good for encryption. */
44 #define PUBKEY_USAGE_CERT GCRY_PK_USAGE_CERT /* Also good to certify keys.*/
45 #define PUBKEY_USAGE_AUTH GCRY_PK_USAGE_AUTH /* Good for authentication. */
46 #define PUBKEY_USAGE_UNKNOWN GCRY_PK_USAGE_UNKN /* Unknown usage flag. */
47 #define PUBKEY_USAGE_NONE 256 /* No usage given. */
Run Code Online (Sandbox Code Playgroud)
我的问题是,鉴于 Bouncy Castle …
file.txt
登录GnuPG的基本选项是file.txt.asc
签名.
在我们的工作流程中,我需要几个签名file.txt
- 主要的例子是作者签名和验证者签名.
GnuPG的最佳用例是什么?我可以将这两个签名存储在一个asc
文件中吗?或者我需要处理两个文件file.txt.authorname.asc
和file.txt.checkername.asc
?或者是其他东西?
在使用符号加密然后解密和验证时,我在验证时不断在流中获取未知对象。消息完整性检查已通过,但是当我尝试在解密后的下一行进行验证时,出现上述错误。
private static void encryptFile(
String outFileName,
OutputStream out,
String fileName,
PGPPublicKey encKey,
String sKeyFileName,
char[] passPhrase,
boolean armor,
boolean withIntegrityCheck)
throws Exception
{
if (armor)
{
out = new ArmoredOutputStream(out);
}
try
{
byte[] bytes = PGPKeyUtil.compressFile(fileName, CompressionAlgorithmTags.ZIP);
PGPEncryptedDataGenerator encGen = new PGPEncryptedDataGenerator(
PGPEncryptedData.CAST5, withIntegrityCheck, new SecureRandom(), "BC");
encGen.addMethod(encKey);
OutputStream cOut = encGen.open(out, bytes.length);
cOut.write(bytes);
cOut.close();
out.close();
cOut.close();
if (armor)
{
out.close();
}
encGen.close();
}
catch (PGPException e)
{
System.err.println(e);
if (e.getUnderlyingException() != null)
{
e.getUnderlyingException().printStackTrace();
}
}
} …
Run Code Online (Sandbox Code Playgroud) 我的主 PGP 密钥上有多个签名子密钥,因此我的笔记本电脑有一个,台式机有一个。但是,似乎两台计算机都尝试使用我的笔记本电脑的密钥,该密钥是最近创建的,而不是我的台式机的密钥。我在笔记本电脑和台式机上都将 user.signingkey 设置为各自的子键,但 git 仍然为我的笔记本电脑使用那个。
我知道.asc
签名作为文本文件输出,而.sig
&.gpg
是二进制文件。
一边说:
.sig
和.gpg
不同的扩展名相同的文件?如果没有,为什么要使用一个?pgp ×10
bouncycastle ×5
gnupg ×5
encryption ×4
c# ×3
java ×2
openpgp ×2
security ×2
sign ×2
cryptography ×1
git ×1
ms-access ×1
signing ×1