Avatar billede sjaka Nybegynder
10. september 2004 - 08:46 Der er 8 kommentarer og
1 løsning

C# med kryptering fra en MySQL-database

Hej.

Jeg har puttet en variabel ned i en MySQL-database og krypteret den deri. Når man kigger på databasen, kan man se den er krypteret, fordi der er spørgsmål osv. over det hele i feltet. Når jeg vil hente den variabel op igen, er den stadig krypteret. Jeg bruger RSACryptoServiceProvider og kan ikke helt forstå jeg ikke kan få den ukrypterede variabel op igen.

På forhånd tak
Avatar billede arne_v Ekspert
10. september 2004 - 09:20 #1
Vi skal nok se noget kode for at kunne hjllpe dig.

Så vidt jeg ved er RSA assymmetrisk d.v.s. at du skal bruge en anden key
til at dekryptere med end den du brugt til at kryptere med. Er du opmærksom
på det ?

(AES eller 3DES er symmetrisk og du kan bruge samme key begge veje)
Avatar billede sjaka Nybegynder
10. september 2004 - 09:30 #2
using System;
using System.Security.Cryptography;
using System.Text;

namespace GV.Model
{
public class DataKryptering
{
  //Create a UnicodeEncoder to convert between byte array and string.
    private UnicodeEncoding ByteConverter = new UnicodeEncoding();
    private RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
        private byte[] encryptedData;
        private byte[] decryptedData;
       
    public DataKryptering()
    {   
    }
       
    public String Kryptering(String kryptering){
    String krypteretdata = "";
        try{               
            byte[] dataToEncrypt = ByteConverter.GetBytes(kryptering);
            encryptedData = RSAEncrypt(dataToEncrypt,RSA.ExportParameters            (false), false);
            krypteretdata = ByteConverter.GetString(encryptedData);
            }
            catch(ArgumentNullException)
            {
                Console.WriteLine("Encryption failed.");
                Console.ReadLine();               
            }
            return krypteretdata;
        }

        public String DeKryptering(String dekryptering){
            String dekrypteretdata = "";
           
            try{               
                byte[] dataToDeEncrypt = ByteConverter.GetBytes                    (dekryptering);
                decryptedData = RSADecrypt                            (dataToDeEncrypt,RSA.ExportParameters(true), false);
                dekrypteretdata = ByteConverter.GetString                     decryptedData);
            }
            catch(ArgumentNullException)
            {
                Console.WriteLine("Encryption failed.");
                Console.ReadLine();               

            }
           
            return dekrypteretdata;
        }

        static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters         RSAKeyInfo, bool DoOAEPPadding)
        {
            try
            {   
                //Create a new instance of RSACryptoServiceProvider.
                RSACryptoServiceProvider RSA = new                         RSACryptoServiceProvider();

                //Import the RSA Key information. This only needs
                //toinclude the public key information.
                RSA.ImportParameters(RSAKeyInfo);

                //Encrypt the passed byte array and specify OAEP                     padding. 
                //OAEP padding is only available on Microsoft                         Windows XP or
                //later. 
                return RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
            }
                //Catch and display a CryptographicException 
                //to the console.
            catch(CryptographicException e)
            {
                Console.WriteLine(e.Message);
                Console.ReadLine();
                return null;
            }
        }

        static public byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters         RSAKeyInfo,bool DoOAEPPadding)
        {
            try
            {
                //Create a new instance of RSACryptoServiceProvider.
                RSACryptoServiceProvider RSA = new                         RSACryptoServiceProvider();

                //Import the RSA Key information. This needs
                //to include the private key information.
                RSA.ImportParameters(RSAKeyInfo);

                //Decrypt the passed byte array and specify OAEP                     padding. 
                //OAEP padding is only available on Microsoft                     Windows XP or
                //later. 
                return RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
            }
                //Catch and display a CryptographicException 
                //to the console.
            catch(CryptographicException e)
            {
                Console.WriteLine(e.ToString());
                Console.ReadLine();
                return null;
            }

        }
    }
}
Avatar billede arne_v Ekspert
10. september 2004 - 09:46 #3
Hm.

Koden ser jo OK (den ligner også den fra docs meget !).

Mit forslag vil være at du:
  * konverterer string til byte[]
  * krypterer byte[] til byte[]
  * gemmer byte[] i database
...
  * henter byte[] fra database
  * dekrypterer byte[] til byte[]
  * konverterer byte[] til string

Altså at du ikke konverterer det krypterede til string.

Brug BLOB som datatype i databasen.
Avatar billede sjaka Nybegynder
13. september 2004 - 08:43 #4
hej jeg har gemt som byte [] i databasen, men jeg kan ikke hente den. Jeg gemmer i MySql database og jeg bruger en OdbcDataReader. Den har ikke en metode der returnerer byte []. Har du  et forslag ?
Avatar billede arne_v Ekspert
13. september 2004 - 18:15 #5
Hvis du bruger .NET 1.1 så har OdbcDataReader en GetBytes metode !
Avatar billede arne_v Ekspert
13. september 2004 - 18:16 #6
NB: De fleste har bedre erfaring med ByteFX driveren til en MySQL database !
Avatar billede arne_v Ekspert
19. september 2004 - 18:59 #7
Kommet videre ?
Avatar billede sjaka Nybegynder
20. september 2004 - 08:34 #8
ja, svar få du point tak for hjælpen.
Avatar billede arne_v Ekspert
20. september 2004 - 09:28 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester