RSA 2048全文件加密(不仅仅是文件内容)

时间:2011-03-29 15:53:59

标签: c# encryption rsa

我收到了供应商对我最新项目的一个非常奇怪的要求,在我回到他们之前询问新的要求或澄清之前,我想我会把它从堆栈溢出的群体中反弹,以确保我不是'我自己完全错了。

我们正在向其中包含敏感信息的供应商发送文件。供应商告诉我们,我们需要使用RSA 2048位加密来加密文件。我向他们重复了3次这样的要求,以确切地说明他们需要什么,每次他们确认只是加密文件内容不是他们要求的,而是他们需要我加密整个文件。

我的主要开发语言是C#,因此我找到了一种使用C#来实现此目的的方法,然后扩展我的搜索范围以找到任何可以指示如何完成此操作的内容但我找不到任何内容。此外,我的同事尝试在概念验证中使用RSA 2048来加密文件的内容,但是遇到了246个字符的字符加密限制,这让我觉得它甚至不可能。添加第246个字符后,我们收到崩溃错误:“密钥无法在指定状态下使用”。

感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

您通常不会使用RSA直接加密数据;它太慢了。通常的做法是为快速对称密码系统生成随机密钥,使用它来加密数据,并使用RSA加密对称密钥。这可能是您遇到此大小限制的原因。

PGP将满足您的需求。

答案 1 :(得分:2)

那么,您的供应商在加密方面一无所知。但是,如果你真的愿意从他们的方面遵循这个奇怪的要求...加密文件块。 RSA无法对内容进行操作,而不是模数大小减去几个字节。根据你使用的填充方案,在你的情况下它是256字节减去像11字节一样。

此外,你可以做一些疯狂的CBC链接块以进一步提高安全性,毫无疑问,在你解释他如何解密文件之后,你的供应商会认为你是一个出色的专家。 ;)从未听说过RSA-CBC,但这绝对是一个绝妙的主意;)

答案 2 :(得分:0)

整个文件可能就像压缩文件一样,包括目录路径,文件名和文件内容。如果您的客户端要求就是这样,那么只需压缩文件然后对其进行加密即可。您可能需要增加RSA密钥大小才能执行此操作。

<强>更新: 以下是用于计算所需RSA密钥大小的VB.net函数。我只是从我的旧项目复制。此函数假定您使用的是最佳非对称加密填充(OAEP):

Public Function CalculateRequireRsaKeyLength(ByRef ByteArrayToEncrypt As Byte()) As Int32


    Try
        Dim TotalBytesEncryptable As Int32

        'TotalBytesEncryptable = ((KeyLength - 384) / 8) + 7

        TotalBytesEncryptable = ByteArrayToEncrypt.Length - 7
        TotalBytesEncryptable = TotalBytesEncryptable * 8
        TotalBytesEncryptable = TotalBytesEncryptable + 384
        If TotalBytesEncryptable <= 384 Then
            Return 384
        End If

        If TotalBytesEncryptable >= 16384 Then
            'means error
            Return 0
        End If

        Return TotalBytesEncryptable
    Catch ex As Exception
        'System.IO.File.WriteAllText("e:\qqwwee.txt", ex.ToString)
        Return 0
    End Try
End Function

<强>更新: 以下是计算RSA密钥大小的链接:how to use RSA to encrypt files (huge data) in C#