tags:

views:

58

answers:

0

I'm attempting to encrypt something then decrypt it. The code shown below is VB but I'm using it with the C# libraries, I've tried the same code in C# as well with the exact same exception thrown.
I'm encrypting the text using the RSA engine and the private key file from streamreader. Writing that to the console works fine, but the invalid block length exception is thrown when I try to decrypt it:

Module Module1

Sub Main()
    Dim input As String
    Dim output As String

    input = "Feb Twenty-Fourth Two Thousand Ten"
    output = EncryptKey(input)
    Console.WriteLine(DecryptKey(output) <---Error!

End Sub

Private Function EncryptKey(ByVal sPlain As String) As String
    Dim enc As New System.Text.UTF8Encoding
    Dim result As Byte()
    result = BouncyCastleCrypto(True, enc.GetBytes(sPlain))
    Return Convert.ToBase64String(result)
End Function

Private Function BouncyCastleCrypto(ByVal bForEncryption As Boolean, ByVal input As Byte()) As Byte()
    Dim bValue64 As Byte() = {0}
    Try
        Dim keypair As Greenway.PrimeResearch.Encryption.Crypto.AsymmetricCipherKeyPair
        Dim sr As New StreamReader("C:\Documents and Settings\xxxx\Desktop\test.KEY")
        keypair = New Greenway.PrimeResearch.Encryption.OpenSsl.PemReader(sr).ReadObject
        Dim cryptEngine As New Greenway.PrimeResearch.Encryption.Crypto.Encodings.Pkcs1Encoding(New Greenway.PrimeResearch.Encryption.Crypto.Engines.RsaEngine())
        cryptEngine.Init(bForEncryption, keypair.Private)
        bValue64 = cryptEngine.ProcessBlock(input, 0, input.Length)
    Catch ex As Exception
        Throw ex
    End Try

    Return bValue64
End Function

Private Function DecryptKey(ByVal sCipher As String) As String
    Dim enc As New System.Text.ASCIIEncoding
    Dim result As Byte()
    result = BouncyCastleCrypto(False, Convert.FromBase64String(sCipher))
    Return enc.GetString(result)
End Function

End Module