17. juli 2004 - 22:32
Der er
12 kommentarer og 1 løsning
2 vejs kryptering
Er der nogle som kan poste et simpelt eksempel på at kryptere en tekst samt dekryptere den? Vha. .NETs klasser. Jeg er lidt lost i kryptering :-(
Annonceindlæg tema
Det må kunne gøres på mange måder. Men her er et lille eksempel jeg lige har bikset udfra docs: using System; using System.Text; using System.Security.Cryptography; class MainClass { public static void Main(string[] args) { Encoding utf = new UTF8Encoding(); DES des = new DESCryptoServiceProvider(); byte[] key = utf.GetBytes("hemmelig"); byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 }; ICryptoTransform encrypt = des.CreateEncryptor(key, iv); String plain1 = "Dette er en lille test"; byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(plain1), 0, utf.GetByteCount(plain1)); for(int i = 0; i < cipher.Length; i++) { Console.WriteLine(cipher[i]); } ICryptoTransform decrypt = des.CreateDecryptor(key, iv); String plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length)); Console.WriteLine(plain2); } }
Til seriøs brug skal DES nok erstattes med Rijndael eller TripleDES.
Her er den samme kode med 3DES: using System; using System.Text; using System.Security.Cryptography; class MainClass { public static void Main(string[] args) { Encoding utf = new UTF8Encoding(); TripleDES des3 = new TripleDESCryptoServiceProvider(); byte[] key = utf.GetBytes("hemmeligabcdefgh12345678"); byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 }; ICryptoTransform encrypt = des3.CreateEncryptor(key, iv); String plain1 = "Dette er en lille test"; byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(plain1), 0, utf.GetByteCount(plain1)); for(int i = 0; i < cipher.Length; i++) { Console.WriteLine(cipher[i]); } ICryptoTransform decrypt = des3.CreateDecryptor(key, iv); String plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length)); Console.WriteLine(plain2); } }
Og med Rijndael alias AES: using System; using System.Text; using System.Security.Cryptography; class MainClass { public static void Main(string[] args) { Encoding utf = new UTF8Encoding(); Rijndael aes = new RijndaelManaged(); byte[] key = utf.GetBytes("hemmeligabcdefgh12345678"); byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 }; ICryptoTransform encrypt = aes.CreateEncryptor(key, iv); String plain1 = "Dette er en lille test"; byte[] cipher = encrypt.TransformFinalBlock(utf.GetBytes(plain1), 0, utf.GetByteCount(plain1)); for(int i = 0; i < cipher.Length; i++) { Console.WriteLine(cipher[i]); } ICryptoTransform decrypt = aes.CreateDecryptor(key, iv); String plain2 = utf.GetString(decrypt.TransformFinalBlock(cipher, 0, cipher.Length)); Console.WriteLine(plain2); } }
Fantastisk - intet mindre... Det er til seriøst brug, så super at du fik de andre med. Ligger der noget i at du har valgt UTF8Encoding() ?
Ikke andet end at det skulle være noget som kan klare ÆØÅ.
oki - tak for hjælpen (igen)
hmm hvordan lægger man et byte[] i en database?
29. juli 2004 - 22:46
#10
Eksempel (MySQL og billede - men det skulle ikke betyde noget): MySqlCommand ins = new MySqlCommand("INSERT INTO pics VALUES (@id, @pic)", con); ins.Parameters.Add("@id", MySqlDbType.Int); ins.Parameters.Add("@pic", MySqlDbType.MediumBlob); ins.Parameters["@id"].Value = i; byte[] data = new Byte[picsize]; // fill data ins.Parameters["@pic"].Value = data; ins.ExecuteNonQuery();
30. juli 2004 - 00:26
#11
kan man ikke lave det til en streng så kan kan indskrive det direkte i sql? (afspille logfil)
30. juli 2004 - 07:26
#12
Så skal du base64 encode det eller sådan noget.
Kurser inden for grundlæggende programmering