|
security
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
RSA Encryption: Saving keys as files, and size of encrypted dataCould I ask for some help with RSACryptoServiceProvider class. I am trying to write 3 small apps to demonstrate RSA encryption, and giving out a public key as an xml string. One app makes the xml key strings and saves them as files, and the other 2 apps encrypt and decrypt, using those xml strings. 1) I make the keys like this, using code from MSDN Dim cp As CspParameters = New CspParameters() cp.Flags = CspProviderFlags.UseMachineKeyStore Dim RSA As RSACryptoServiceProvider = New RSACryptoServiceProvider(2048, cp) Dim PubKey as string = RSA.ToXmlString(False) Dim PrivateKey as string = RSA.ToXmlString(True) 'subsequently save these strings to file Do I need to initialise the CspParameters and use it in the creation of the RSACryptoServiceProvider? Could I just use the parameterless constructor on the RSACryptoServiceProvider to give me a new instance, and then save the public + private xml keystrings, like this Dim RSA As RSACryptoServiceProvider = New RSACryptoServiceProvider(2048) If I have to use the CspParameters, since I am saving the xml strings for later use, do I have to set the UseMachineKeyStore? Would this code work if I move the exe's to another machine in either case. The idea of these apps is that I give out the public key string file and the encryptor, someone else encrypts some stuff for me at a remote location, and then I decrypt the file they send me with my private key. 2) When encrypting, if I try to encrypt a large string of 'stuff', I get a cryptographic error "Key not valid for use in specified state". Heres the code from the function: Dim RSA As New RSACryptoServiceProvider RSA.FromXmlString(XMLKey) Return RSA.Encrypt(DataToEncrypt, False) where XMLKey is the public xml key string from point 1) above, previously saved and re-opened on my hard drive. If I encrypt a small amount of data all goes well and I can decrypt later on with Dim RSA As New RSACryptoServiceProvider() RSA.FromXmlString(XMLKey) ClearTxt = RSA.Decrypt(BytesToDecrypt, False) Return Encoding.ASCII.GetString(ClearTxt) As you can tell I am very inexperienced with encryption techniques, so I apologise if these are trivial questions. Thanks for any help. regards, Gary Hi,
1) Here's an easy example how you can generate a new key pair and save each key in a xml file. private static void GenerateKeys(string pubFile, string privateFile) { // Create a new RSA signing key and save it in the container. RSA rsaKey = RSA.Create(); // Write the public and private key in files. StringToFile(pubFile, rsaKey.ToXmlString(false)); StringToFile(privateFile, rsaKey.ToXmlString(true)); } private static void StringToFile(string outfile, string data) { // Write the data into the file. StreamWriter streamWriter = System.IO.File.CreateText(outfile); streamWriter.Write(data); streamWriter.Close(); } 2) The asymmetric encryption is not suitable for the encryption of large data. Use the RSA key pair to encrypt a symmetric encryption key. Regards, Dominik ----------------------------- http://blogs.ecreation.ch Show quoteHide quote "Gary Bond" wrote: > HI All, > > Could I ask for some help with RSACryptoServiceProvider class. I am trying > to write 3 small apps to demonstrate RSA encryption, and giving out a public > key as an xml string. One app makes the xml key strings and saves them as > files, and the other 2 apps encrypt and decrypt, using those xml strings. > > 1) I make the keys like this, using code from MSDN > > Dim cp As CspParameters = New CspParameters() > cp.Flags = CspProviderFlags.UseMachineKeyStore > Dim RSA As RSACryptoServiceProvider = New > RSACryptoServiceProvider(2048, cp) > Dim PubKey as string = RSA.ToXmlString(False) > Dim PrivateKey as string = RSA.ToXmlString(True) > 'subsequently save these strings to file > > Do I need to initialise the CspParameters and use it in the creation of the > RSACryptoServiceProvider? Could I just use the parameterless constructor on > the RSACryptoServiceProvider to give me a new instance, and then save the > public + private xml keystrings, like this > > Dim RSA As RSACryptoServiceProvider = New > RSACryptoServiceProvider(2048) > > > If I have to use the CspParameters, since I am saving the xml strings for > later use, do I have to set the UseMachineKeyStore? Would this code work if I > move the exe's to another machine in either case. The idea of these apps is > that I give out the public key string file and the encryptor, someone else > encrypts some stuff for me at a remote location, and then I decrypt the file > they send me with my private key. > > > 2) When encrypting, if I try to encrypt a large string of 'stuff', I get a > cryptographic error "Key not valid for use in specified state". Heres the > code from the function: > > Dim RSA As New RSACryptoServiceProvider > RSA.FromXmlString(XMLKey) > Return RSA.Encrypt(DataToEncrypt, False) > > > where XMLKey is the public xml key string from point 1) above, previously > saved and re-opened on my hard drive. > > If I encrypt a small amount of data all goes well and I can decrypt later on > with > > Dim RSA As New RSACryptoServiceProvider() > RSA.FromXmlString(XMLKey) > ClearTxt = RSA.Decrypt(BytesToDecrypt, False) > Return Encoding.ASCII.GetString(ClearTxt) > > As you can tell I am very inexperienced with encryption techniques, so I > apologise if these are trivial questions. > > Thanks for any help. > > regards, > Gary Hi Zemp,
Sorry it took me a while to reply - it has been extra busy at work. Anyhow, thanks for the info. I kinda figured that was the way to do it, but just wanted some other opinions. Many thanks for taking the time to reply, regards, Gary Show quoteHide quote "Zemp Dominik" wrote: > Hi, > > 1) Here's an easy example how you can generate a new key pair and save each > key in a xml file. > > private static void GenerateKeys(string pubFile, string privateFile) > { > // Create a new RSA signing key and save it in the container. > RSA rsaKey = RSA.Create(); > > // Write the public and private key in files. > StringToFile(pubFile, rsaKey.ToXmlString(false)); > StringToFile(privateFile, rsaKey.ToXmlString(true)); > } > > private static void StringToFile(string outfile, string data) > { > // Write the data into the file. > StreamWriter streamWriter = System.IO.File.CreateText(outfile); > streamWriter.Write(data); > streamWriter.Close(); > } > > 2) The asymmetric encryption is not suitable for the encryption of large > data. Use the RSA key pair to encrypt a symmetric encryption key. > > Regards, > Dominik > ----------------------------- > http://blogs.ecreation.ch > > > "Gary Bond" wrote: > > > HI All, > > > > Could I ask for some help with RSACryptoServiceProvider class. I am trying > > to write 3 small apps to demonstrate RSA encryption, and giving out a public > > key as an xml string. One app makes the xml key strings and saves them as > > files, and the other 2 apps encrypt and decrypt, using those xml strings. > > > > 1) I make the keys like this, using code from MSDN > > > > Dim cp As CspParameters = New CspParameters() > > cp.Flags = CspProviderFlags.UseMachineKeyStore > > Dim RSA As RSACryptoServiceProvider = New > > RSACryptoServiceProvider(2048, cp) > > Dim PubKey as string = RSA.ToXmlString(False) > > Dim PrivateKey as string = RSA.ToXmlString(True) > > 'subsequently save these strings to file > > > > Do I need to initialise the CspParameters and use it in the creation of the > > RSACryptoServiceProvider? Could I just use the parameterless constructor on > > the RSACryptoServiceProvider to give me a new instance, and then save the > > public + private xml keystrings, like this > > > > Dim RSA As RSACryptoServiceProvider = New > > RSACryptoServiceProvider(2048) > > > > > > If I have to use the CspParameters, since I am saving the xml strings for > > later use, do I have to set the UseMachineKeyStore? Would this code work if I > > move the exe's to another machine in either case. The idea of these apps is > > that I give out the public key string file and the encryptor, someone else > > encrypts some stuff for me at a remote location, and then I decrypt the file > > they send me with my private key. > > > > > > 2) When encrypting, if I try to encrypt a large string of 'stuff', I get a > > cryptographic error "Key not valid for use in specified state". Heres the > > code from the function: > > > > Dim RSA As New RSACryptoServiceProvider > > RSA.FromXmlString(XMLKey) > > Return RSA.Encrypt(DataToEncrypt, False) > > > > > > where XMLKey is the public xml key string from point 1) above, previously > > saved and re-opened on my hard drive. > > > > If I encrypt a small amount of data all goes well and I can decrypt later on > > with > > > > Dim RSA As New RSACryptoServiceProvider() > > RSA.FromXmlString(XMLKey) > > ClearTxt = RSA.Decrypt(BytesToDecrypt, False) > > Return Encoding.ASCII.GetString(ClearTxt) > > > > As you can tell I am very inexperienced with encryption techniques, so I > > apologise if these are trivial questions. > > > > Thanks for any help. > > > > regards, > > Gary
Windows authentication over remoting... possible?
Service, Requested registry access is not allowed Re: How to - PKCS#7 in c# ConnectionStrings encryption Creating New Process Under Alternate Credentials (createprocessasuser) Questions about RijndaelManaged and Rijndael code access security across the network How to grant and deny the access to a virtual directory? Restrict access to application from "outside" problem running application DPAPI based |
|||||||||||||||||||||||