Ureader.com  
Microsoft software help and Community
   home   |   control panel login   |   archive   |  
 
DotNet
acad.assignment.mngr
academic
adonet
aspnet
aspnet.announcements
aspnet.build.controls
aspnet.caching
aspnet.datagridcontrol
aspnet.mobile
aspnet.security
aspnet.webcontrols
aspnet.webservices
clr
compactframework
component_services
datatools
distributed_apps
drawing
faqs
framework
framework.wmi
general
internationalization
interop
languages.csharp
languages.jscript
languages.vb
languages.vb.controls
languages.vb.data
languages.vb.upgrade
languages.vc
languages.vc.libraries
myservices
odbcnet
performance
remoting
scripting
sdk
security
setup
vjsharp
vsa
webservi.enhancements
webservices
windowsforms
windowsforms.controls
winforms.databinding
winforms.designtime
xml
  
 
date: Fri, 25 Apr 2008 13:53:18 +0000 (UTC),    group: microsoft.public.dotnet.security        back       


Encrypt / Sign ? Not really sure   
Ok 

I need to put a small amount of inforamtion on a public server.
This information should be encoded so as to make it less than easily read 
by a human.
I need a program I write to be able to access this info and decrypt it.
This information needs to be checkable as having been created by me and not 
messed with by someone else.

I remember learning about Public-Private Key encryption at Uni (Some 8-10 
years ago - it all made some kind of sense then.) I remember that once a 
private and public key are created, they act more or less like the ying and 
yang of each other.

Given an encryption algorithm, if you use 1 key to encrypt then the other 
is the key to the decryption.

So I thought I'd encrypt my data using my private key and then have my program 
decrypt it with my public key. 

I found RSACryptoServiceProvider and set to work creating the following code:
-------------------------------------------------------------
Imports System
Imports System.Security.Cryptography
Imports System.Text
Public Class Cryptography
    Private Shared mPublicKey As String
    Private Shared mPrivateKey As String

    ' This function used only once to generate the Constants above
    Public Shared Sub GenerateKeys()
        Dim RSA As RSACryptoServiceProvider = New RSACryptoServiceProvider()
        mPublicKey = RSA.ToXmlString(False) ' gets the public key
        mPrivateKey = RSA.ToXmlString(True) ' gets the private key
    End Sub

    ' This function should work but throws a runtime error talking about 
bad data
    Public Shared Sub TestKeys()
        Call GenerateKeys()
        Dim StartString As String = "Hello EveryBody"
        Debug.Print(String.Format("Start String:'{0}'", StartString))
        Dim EncryptedString As String = EncryptString(StartString, mPrivateKey)
        Dim EndString As String = DecryptString(EncryptedString, mPublicKey)
        Debug.Print(String.Format("End String:'{0}'", EndString))
    End Sub

    ' Utility Funcs
    Private Shared Function EncryptString(ByVal StringToEncode As String, 
ByVal KeyInfo As String) As String
        Dim RSAEncoder As New RSACryptoServiceProvider()
        RSAEncoder.FromXmlString(KeyInfo)
        Dim DecodedBytes As Byte() = Encoding.Unicode.GetBytes(StringToEncode)
        Dim EncodedBytes As Byte() = RSAEncoder.Encrypt(DecodedBytes, False)
        Return Convert.ToBase64String(EncodedBytes)
    End Function
    Private Shared Function DecryptString(ByVal EncodedString As String, 
ByVal KeyInfo As String) As String
        Dim RSADecoder As New RSACryptoServiceProvider()
        RSADecoder.FromXmlString(KeyInfo)
        Dim EncodedBytes As Byte() = Convert.FromBase64String(EncodedString)
        Dim DecodedBytes As Byte() = RSADecoder.Decrypt(EncodedBytes, False)
        Return Encoding.Unicode.GetString(DecodedBytes)
    End Function
End Class
-------------------------------------------------------------

However I seem to get a "Bad Data" Cryptographic Exception

Can some one tell me where I'm going wrong?

Any help gratefully recieved.

Thanks

--
Rory
date: Fri, 25 Apr 2008 13:53:18 +0000 (UTC)   author:   Rory Becker am

Re: Encrypt / Sign ? Not really sure   
I didn't read your code thoroughly, but I think you're dealing with a 
conceptual error here.

Asymmetric encryption is generally used when you want others to be able 
to send you stuff that only you can read. Hence you ENCRYPT with your 
public key (the one you give out) and you DECRYPT with the private key 
(the one only you know).

However, you sound like you want to be the only one with either key 
(only you can send, only you can receive). In that case, you may be 
better off with symmetric encryption which uses the same key for both 
encryption and decryption. It's easier to manage (half the keys) and 
runs faster.

If switching keys doesn't do the trick, I have some test bench code that 
might help should you need it.

Rory Becker wrote:
> Ok
> I need to put a small amount of inforamtion on a public server.
> This information should be encoded so as to make it less than easily 
> read by a human.
> I need a program I write to be able to access this info and decrypt it.
> This information needs to be checkable as having been created by me and 
> not messed with by someone else.
> 
> I remember learning about Public-Private Key encryption at Uni (Some 
> 8-10 years ago - it all made some kind of sense then.) I remember that 
> once a private and public key are created, they act more or less like 
> the ying and yang of each other.
> 
> Given an encryption algorithm, if you use 1 key to encrypt then the 
> other is the key to the decryption.
> 
> So I thought I'd encrypt my data using my private key and then have my 
> program decrypt it with my public key.
> I found RSACryptoServiceProvider and set to work creating the following 
> code:
> -------------------------------------------------------------
> Imports System
> Imports System.Security.Cryptography
> Imports System.Text
> Public Class Cryptography
>    Private Shared mPublicKey As String
>    Private Shared mPrivateKey As String
> 
>    ' This function used only once to generate the Constants above
>    Public Shared Sub GenerateKeys()
>        Dim RSA As RSACryptoServiceProvider = New RSACryptoServiceProvider()
>        mPublicKey = RSA.ToXmlString(False) ' gets the public key
>        mPrivateKey = RSA.ToXmlString(True) ' gets the private key
>    End Sub
> 
>    ' This function should work but throws a runtime error talking about 
> bad data
>    Public Shared Sub TestKeys()
>        Call GenerateKeys()
>        Dim StartString As String = "Hello EveryBody"
>        Debug.Print(String.Format("Start String:'{0}'", StartString))
>        Dim EncryptedString As String = EncryptString(StartString, 
> mPrivateKey)
>        Dim EndString As String = DecryptString(EncryptedString, mPublicKey)
>        Debug.Print(String.Format("End String:'{0}'", EndString))
>    End Sub
> 
>    ' Utility Funcs
>    Private Shared Function EncryptString(ByVal StringToEncode As String, 
> ByVal KeyInfo As String) As String
>        Dim RSAEncoder As New RSACryptoServiceProvider()
>        RSAEncoder.FromXmlString(KeyInfo)
>        Dim DecodedBytes As Byte() = 
> Encoding.Unicode.GetBytes(StringToEncode)
>        Dim EncodedBytes As Byte() = RSAEncoder.Encrypt(DecodedBytes, False)
>        Return Convert.ToBase64String(EncodedBytes)
>    End Function
>    Private Shared Function DecryptString(ByVal EncodedString As String, 
> ByVal KeyInfo As String) As String
>        Dim RSADecoder As New RSACryptoServiceProvider()
>        RSADecoder.FromXmlString(KeyInfo)
>        Dim EncodedBytes As Byte() = Convert.FromBase64String(EncodedString)
>        Dim DecodedBytes As Byte() = RSADecoder.Decrypt(EncodedBytes, False)
>        Return Encoding.Unicode.GetString(DecodedBytes)
>    End Function
> End Class
> -------------------------------------------------------------
> 
> However I seem to get a "Bad Data" Cryptographic Exception
> 
> Can some one tell me where I'm going wrong?
> 
> Any help gratefully recieved.
> 
> Thanks
> 
> -- 
> Rory
> 
>
date: Fri, 25 Apr 2008 17:43:14 -0500   author:   Mark Assousa

Google
 
Web ureader.com


    COPYRIGHT 2007, YARDI TECHNOLOGY LIMITED, ALL RIGHT RESERVE  |   contact us