BouncyTree Encryption
本文关键字:Encryption BouncyTree | 更新日期: 2023-09-27 18:05:39
我目前在一个运行的问题。我希望使用BouncyCastle PGP加密文件。情况是,我有需要使用的提供的公钥(基本的asc)。我一直在寻找执行加密的方法,但一切都围绕着钥匙圈的使用。我发现有文章讨论使用PgpPublicKeyRingBundle (c#),并将ASC加载到其中以创建keyring。不幸的是,这不起作用。所以我的问题是-我如何加密一个文件使用BoundyTree当我所有的是一个密钥文件(asc),而不是一个密匙环。如果有人能指出如何在BouncyTree中使用ASC文件创建密匙环,或者如何仅使用ASC文件加密,将大有帮助。
也许我应该把自己说得更清楚一些。我一直在尝试使用BouncyTree对文件执行加密。它更侧重于使用一个钥匙圈来执行操作。我不是很清楚如何使用BouncyTree,当我只有一个简单的密钥文件-不是一个密钥环文件。我读过有很多方法来准备一个钥匙圈文件,并得到一个简单的钥匙文件用作钥匙圈文件。最后我发现了以下作品:
factory = new PgpObjectFactory(testPubKey);
temp = factory.NextPgpObject() as PgpPublicKeyRing;
pubKey = temp.GetPublicKey();
我发现这一点,当我遇到PgpObjectFactory,它需要一个字节数组。获取字节数组有点令人困惑,因为我认为底层PGP函数会正确处理密钥文件。我发现情况并非如此。我要做的是得到一个正常工作的字节数组
private byte[] PrepKey(string KeyFile)
{
string strPubKey = File.ReadAllText(KeyFile);
byte[] testPubKey;
// Base64.Decode(
////"-----BEGIN PGP PUBLIC KEY BLOCK-----" +
////"Version: BCPG C# v1.6.1.0" +
////"'r'n" +
// "mQENBFW5KbYBCADPl4qP61eKcls5q6tHrhAEimST4BSStlAQmGjhkANVJIFLAcCm" +
// "kOxFtGvtSH3EOycSc98hlh5+BlsliCtRNxHpZTzfHk9UZymb3SIAhGsAYrBVhTgc" +
// "AoGFDnNaCGCWSoAkLMwChPQc5vURCa3kzSfxmjTXAZOygj9rO0VdJMTrf9J7lJ6n" +
// "cC27/cmbMxqnOSa3pF2FyRr1q6H/Fux0nZgr24rkYs+TZetwhRv24HkI5Ad9Rdxi" +
// "QIBc/p3n9Zc8n4nTJHEfWUJq+k69K8MmO0byxQQ+PVXdpr9wH8DgavVZm/lVSPwN" +
// "YaEaR5AxzR2NC4ZEdVv3oGtYP/iLPzdkPb6VABEBAAG0AIkBHAQQAQIABgUCVbkp" +
// "tgAKCRCp8nOh8WrJThw8B/wO0B/TACRAVX1rGmMuQ1lqJSiw6EoPY20Tl3nXQ7Fv" +
// "aq9OQ6YN20/lPXepqHp5xUzZ0klcwd4FRb78idU5XaxWh3lGeLmcK1Kxwcq85Jnl" +
// "hrxq28r1rU045db+czjVvcAniBS1VogWSUFlDhGDxZk3mdG/8otwFV1CFUIT7NEB" +
// "Py3+gpwI6rp3tgJhk21OzBtBTW/m4l7UUdc1eb9kpJzymZ49YSTjYh6zDCyI397j" +
// "znnfsCICD6L5ZFxlfSJZthQjtOYavwlPdyJqgAiNdhnhKNPIxkNWM2tyBqUZqlso" +
// "aSE2qQyWw+JnDEl0HJLKwXPTvCqUZ282vcDL2Z1fScjO"
////"=f4/l'r'n" +
////"-----END PGP PUBLIC KEY BLOCK-----"
// );
var lines = (strPubKey.Split(new string[] { Environment.NewLine, "'r", "'n" }, StringSplitOptions.None)).ToList();
for (int i = lines.Count - 1; i >= 0; i--)
if (string.IsNullOrEmpty(lines[i].Trim())) lines.RemoveAt(i);
lines.RemoveRange(0, 2);
lines.RemoveRange(lines.Count - 2, 2);
testPubKey = Base64.Decode(string.Join(string.Empty, lines));
return testPubKey;
}
现在,这只是从原始文件中删除行,并排除换行。正如我所说的,这是有效的,但我不确定这是加载密钥文件供PGP函数使用的正确方法。我想知道的是,如果这个操作是正确的,或者是否有一个更正确/更好的方法来做到这一点(或者我正在做一些不必要的事情-但再次这是我可以得到PGP函数来处理密钥文件的唯一方法)。
彼得归根结底,执行PGP加密活动并不像您想象的那么简单。我担心的是我不想管理一个钥匙圈。我只是想根据典型的公钥定义加密文件。使用BouncyCastle似乎有这个能力,你可以查看我在原始描述中更新的细节。主要问题是如何根据密钥生成器生成的标准密钥文件获取原始密钥数据。我的解决方案确实去掉了BouncyCastle PGP处理器不能使用的部分,我在多个密钥上进行了测试以确保这一点。但是我遇到了一个指定DSA加密的公钥问题。就目前而言,BouncyCastle不支持DSA——这有点令人沮丧,但了解这个主题的人指出的评论表明,DSA不被认为是有效/良好的加密,因此BouncyCastle不处理它。如果您浏览BouncyCastle代码,您会看到,当设置用于加密的DSA时,会抛出断言-表示不处理DSA。
因此,如果您准备得当,您可以使用直接的PGP密钥对openccastle进行加密,但并非所有可能的密钥都可以使用