如何使用RSA使用公钥解密(不验证)数据?

时间:2014-10-28 21:25:53

标签: .net encryption rsa

我有一个.Net应用程序,我正在开发许可模块。 我的许可证应如下所示:“from:01/01/2014:to:01/01/2016” 这意味着许可证允许在2014年1月至2016年1月期间使用我的应用程序。

为了减少(不消除)使我的应用程序容易被黑客攻击的风险,我使用RSA算法以使用私钥(在应用程序级别不可用)加密我的许可证字符串并使用公钥解密它将存储在应用程序的某个位置。

通过在RSAServeProvider类中挖掘更多内容,我发现只能使用公钥(不解密)来验证数据。但是,某些信息无法在要验证的应用程序中获得。

示例:

在我的应用程序中,我们假设以下算法:

1-阅读许可文件

2-解密许可证文件

3-获取存储在许可证文件中的日期

4-将其与当前日期进行比较

5-如果当前日期在许可证的日期之前,请继续,否则退出

步骤3实际上是不可能的,因为RSA只允许使用应用程序中已有的值验证许可证: 例如:检查许可证文件是否与2016年1月相同(并且无论获取许可证文件的价值是什么)

有人知道如何仅使用RSA公钥解密数据吗?

以下是我在MSDN中使用的一些代码:

        Dim ByteConverter As New ASCIIEncoding

        Dim dataString As String = "Data to Sign" 

        ' Create byte arrays to hold original, encrypted, and decrypted data. 
        Dim originalData As Byte() = ByteConverter.GetBytes(dataString)
        Dim signedData() As Byte 

        ' Create a new instance of the RSACryptoServiceProvider class  
        ' and automatically create a new key-pair. 
        Dim RSAalg As New RSACryptoServiceProvider

        Dim PrivateKey As RSAParameters = RSAalg.ExportParameters(True)
        Dim PublicKey as RSAParameters = RSAalg.ExportParameters(False)

        ' Hash and sign the data.
        signedData = HashAndSignBytes(originalData, PrivateKey )

        ' Verify the data and display the result to the console
        If VerifySignedHash(originalData, signedData, PublicKey) Then
            Console.WriteLine("The data was verified.")
        Else
            Console.WriteLine("The data does not match the signature.")
        End If 

如果我这样做

    RSA = New RSACryptoServiceProvider
    RSA.ImportParameters(PublicKey)
    Dim DecryptedData As Byte() = RSA.Decrypt(Data, False)

我收到错误:其他信息:密钥不存在。

提前谢谢

1 个答案:

答案 0 :(得分:-4)

当您使用RSA时,您使用公开键进行加密,而使用私有键进行解密。你正在做相反的事情。