【问题标题】:BouncyCastle encrypted file is forcing passphrase to be enteredBouncyCastle 加密文件强制输入密码
【发布时间】:2017-03-07 05:27:54
【问题描述】:

我对 BouncyCastle 有一点奇怪的问题。

发生的事情是我正在使用公钥加密文本文件,然后将其传输给第三方。当他们尝试自动解密文件时(使用 Globalscape - 不确定版本),该过程失败,要求输入密码来解锁密钥。

如果我执行相同的过程,但使用 GPG4Win 使用相同的密钥加密文件,他们不会遇到相同的问题。

这是进行加密的代码:

private static bool EncryptFile(Stream outputStream, string fileName, PgpPublicKey encKey, bool withIntegrityCheck)
        {
            try
            {
                var bytes = PgpUtils.CompressFile(fileName, CompressionAlgorithmTag.Uncompressed);

                // encrypt using AES-256
                var encryptedDataGenerator = new PgpEncryptedDataGenerator(SymmetricKeyAlgorithmTag.Aes256, withIntegrityCheck, new SecureRandom());
                encryptedDataGenerator.AddMethod(encKey);

                using (var cOutStream = encryptedDataGenerator.Open(outputStream, bytes.Length))
                {
                    cOutStream.Write(bytes, 0, bytes.Length);
                }

                return true;
            }
            catch (Exception e)
            {
                Trace.TraceError($"Exception in EncryptFile: {e}");
                return false;
            }
        }

我承认我在这里有点迷失了。谁能指出我错过了什么?还是我应该要求第三方进一步挖掘?

干杯

【问题讨论】:

    标签: c# bouncycastle public-key-encryption


    【解决方案1】:

    这更像是一种确定潜在问题的高级方法:

    您正在使用公钥进行加密。这意味着收件人需要匹配的私钥。

    看起来好像接收者拥有密钥,因为否则客户端应该抱怨缺少私钥,而不是抱怨缺少密钥的密码。

    检查以下(从容易到不那么容易)

    • 收件人输入密码后能否解密?如果是,请配置客户端以保存密码。
    • 尝试使用本地 gpg 解密
    • 您确定客户端有私钥吗?如果没有,请确保客户端拥有私钥(也许您在代码和 gpg4win 中使用了不同的密钥)
    • 客户端可以处理加密方法吗? IE。客户知道如何解密您发送的消息格式吗?(“它曾经工作过吗?” - 我没有使用 Globalscape 的经验)

    【讨论】:

    • 是的,当使用 Gpg4win(或更具体地说,Kleopatra)完成加密时,客户端可以成功并自动解密使用相同公钥加密的文件。
    • 你能解密你用 gpg 或 gpg4win 创建的文件吗?
    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 2018-12-27
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多