Er det her en eller anden form for morsomhed?? Du har flere gange tidligere fået at vide at det ikke er sikkert at gemme din key sammen med dit program. Om det er indlejret i programmet, som fil eller i reistry er underordnet. Sikkerhrdsregel nr. 1 siger, at du ikke skal prøve at opfinde metoder selv, til at gemme hemmeligheder. Brug anerkendte veldokumenterede metoder som man ved virker i stedet.
Jeg har før vist dig to gange endda, hvordan du bruger Windows data protection api til at løse din opgave. Men alligevel insisterer du på at opfinde din egen måde. Hvorfor?
Jamen, brugte jo den algoritme som "Arne_v" viste mig?
Og den virker fint. Skal bare brge et sted at gemme den encryption key.
Med hensyn til de oplysninger du siger jeg har fået? Er det så disse --> -------------------------------------------------- Men altså - det er vel lige præcis det den kodestump jeg postede gør for dig.
using (Stream stream = File.Open("pathTilDinSettingsFile_EllerEndnuBedre_IsolatedStorage")) using (TextWriter writer = new StreamWriter(stream)) { writer.Write(encryptedStuff); }
Og når du skal loade igen:
using (Stream stream = File.Open("pathTilDinSettingsFile_EllerEndnuBedre_IsolatedStorage")) using (TextReader reader = new StreamReader(stream)) { string encryptedStuff = reader.ReadLine(); string stuff = encryptedStuff.Decrypt(); XDocument dinXml = XDocument.Parse(stuff); }
Det er vel egentlig ret ligetil eller hur? --------------------------------------------------------
Eller dette? --> -------------------------------------------------------- using System.Configuration; using System.Xml; using System.Xml.Linq;
namespace B.Testing {
static class StringEncryptionExtensions {
public static string Encrypt(this string argument) { if (string.IsNullOrEmpty(argument) throw new ArgumentException("argument is null or empty.", "argument"); DpapiProtectedConfigurationProvider cp = new DpapiProtectedConfigurationProvider(); XmlElement n = new XmlDocument().CreateElement("temp"); n.InnerText = argument; return cp.Encrypt(n).FirstChild.FirstChild.InnerText; }
public static string Decrypt(this string argument) { if (string.IsNullOrEmpty(argument) throw new ArgumentException("argument is null or empty.", "argument"); DpapiProtectedConfigurationProvider cp = new DpapiProtectedConfigurationProvider(); XElement e = new XElement("EncryptedData", new XElement("CipherData", new XElement("CipherValue", argument))); using (XmlReader xr = e.CreateReader()) { XmlDocument d = new XmlDocument(); d.Load(xr); return cp.Decrypt(d.FirstChild).InnerText; } } } }
--- Koden bruger Windows DPapi til at kryptere stringen med. Dvs. krypteringen er bundet op på dine windows credentials (eller de credentials programmet kører under). ---------------------------------------------------------
Holder fast ved at bruge Rijndael til at kryptere med. Men så kan jeg vel bruge DPapr til at gemme min encrypton key med? (:
Kan ikke se hvad du mener med at finde sin egen metode ikke er sikker. INGEN metode er helt 100% skudsikker. Ifølge msdn selv. Så er det programmørens egenskab til at blande flere løsninger der gør krypteringen sikker. Og ikke brugen af én metode. Så dan forstod jeg det i hvert fald.
Men hvad med denne kombination nedenfor.
"Min hemmelige tekst"
Jeg kryptere min tekst med Rijndael ved brug af IV og key.
Min key gemmer jeg så med følgende metoder
------- // Original Key string Key = "[b]jioeygtHET153Kræ[b/]";
Du skal bruge begge kodestumper. Den ene bruger jo den anden.
At kryptere en streng: string s = "test".Encrypt();
At dekrypte igen: string uncrypted = s.Decrypt();
Du skal ikke gemme nogen key. Det klarer Windows for dig. Men det virker selvfølgelig kun hvis det er samme Windows-bruger der både krypterer og dekrypterer.
Saa vidt jeg kan laese mig til gemmer DPAPI faktisk key i registry.
Synes godt om
Ny brugerNybegynder
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.