2 Stimmen

Problem mit .NET-Verschlüsselung

Ich verweise auf diesen Artikel http://www.codeproject.com/KB/security/DotNetCrypto.aspx und ich versuche, eine verschlüsselte Zeichenfolge anstelle von Klartext zu schreiben. Im Folgenden finden Sie den Code, den ich verwende:

TextWriter tw = new StreamWriter("c:\\temp\\test.txt");
string plainString = "String to be encrypted";
PasswordDeriveBytes pdb = new PasswordDeriveBytes("Test",new byte[] {0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d,0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76});
Rijndael alg = Rijndael.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
tw.WriteLine(alg.IV.ToString());
MemoryStream ms = new MemoryStream(); 
CryptoStream cs = new CryptoStream(ms,alg.CreateEncryptor(), CryptoStreamMode.Write);
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(plainString);
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
tw.WriteLine(ms.ToString());
ms.Close();
tw.Flush();

Wenn ich die Datei jedoch öffne, erhalte ich System.IO.MemoryStream anstelle einiger verschlüsselter Zeichen. Was habe ich verpasst?

0voto

James Kovacs Punkte 11419

MemoryStream.ToString() stützt sich auf die Standardimplementierung von Object.ToString(), die den Klassennamen ausgibt. Erstellen Sie einen FileStream und übergeben Sie diesen an den CryptoStream ctor.

http://msdn.microsoft.com/en-us/library/system.io.filestream.aspx

0voto

Shashi Punkte 2794

Ich denke, dass .net die Verschlüsselung von Strings mit dem MD5-Algorithmus sehr gut unterstützt. Wenn Sie MD5 verwenden möchten, sehen Sie sich den folgenden Code an.

private void encrypt(ref string password)
    {
        Int32 counter;
        Char[] passwordArr;
        String encryptedPassword;
        Byte[] hashedPassword;
        MD5CryptoServiceProvider obj = new MD5CryptoServiceProvider();

        passwordArr = password.ToCharArray();
        Byte[] passwordBytes = new byte[passwordArr.Length - 1];
        for (counter = 0; counter < passwordBytes.Length; counter++)
        {
            passwordBytes[counter] = Convert.ToByte(passwordArr[counter]);
        }
        hashedPassword = obj.ComputeHash(passwordBytes);
        encryptedPassword = BitConverter.ToString(hashedPassword);
        password =  encryptedPassword;
        obj = null;
    }

0 Stimmen

Blöde Frage, kann ich meinen String wieder entschlüsseln, wenn ich MD5 verwende? Wie geht das?

0 Stimmen

Ihr Code geht davon aus, dass char == byte ist, was falsch ist. Verwenden Sie stattdessen Encoding.GetBytes.

1 Stimmen

1 MD5 ist ein Hashing-Algorithmus, kein Verschlüsselungsalgorithmus, d. h. er funktioniert nur in eine Richtung. Aus einem MD5-Hash-Wert lässt sich der ursprüngliche Klartext nicht wiederherstellen.

0voto

Mubashir Khan Punkte 1454

Nun, das Problem ist mit der ms.ToString(). Sie sollten eher die Bytes aus memorystream lesen, ändern Sie es auf geeignete Codierung und dann in den Textstrom schreiben.

0 Stimmen

Byte[] bytes = ms.ToArray(); string s = Encoding.GetEncoding("whatever").GetString(bytes,0,bytes.Length);tw.WriteLine(s);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X