10. september 2004 - 08:46Der 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.
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)
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;
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; }
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.
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 ?
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.