Autor Beitrag
Spiritnight
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Sa 29.03.08 21:26 
Hallo

Ihr habt mir oft weitergeholfen und nach Tagen von googeln und probieren seid Ihr meine letzte Hoffnung.
Ich habe mir das Beispiel Programm für AES aus dem Internet geladen und versuche es seid Tagen zu 100% zum laufen zu bekommen.
Der unten stehe Quelltext hat die Aufgabe Strings zu verschlüsseln und zu entschlüsseln, und es läuft zu sagen wir 80%.
Es ist fast eine komplette Kopie der Vorgabe. Die im übrigen den selben Fehler aufzeigt.
Im ersten Feld gibt man den zu verschlüsselten Text ein, im zweiten steht er dann verschlüsselt und dritten wieder entschlüsselt.

Zu meinem Problem:
- gibt man Beispielsweise "aaaa" ein so funktioniert es 100% korrekt.
- gebe ich aber "aaa" ein ensteht ein Fehler er entschlüsselt nicht mehr.
- Diese Fehler passiert nicht nur bei "aaa" auch bei anderen willkürlich gewählten Strings.

Irgendwo in dem Qulltext ist etwas nicht ok oder ich übersehe etwas, ich würde mich wirklich sehr freuen wenn sich das jemand ansieht.
Ich habe den Quelltext nahezu auf Urzustand gebracht weil der Fehler bereits in Vorlage vorhanden war.

Ich hoffe sehr mir kann jemand helfen

Mfg Martin

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AesLib;
namespace AES_CRYPT
{
    public partial class Form1 : Form
    {
        //Encoding utf = new UTF8Encoding();        //hier bin ich unsicher ob utf8 oder unicode
        Encoding utf = new UnicodeEncoding();       //veränderungen beheben nicht den fehler.
        private Aes.KeySize keysize;                //instanz für bit Wert (192,256 usw)
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)//Ver
        {
            string eing = textBox1.Text;//Diese Feld trennt nur die ersten 8 Zeichen vom String ab
            string str1 = "";           //Daher ich es nicht hinbekommen habe längere Strings zu benutzen.
            string str2 = "";
            string outp = "";
            if (eing.Length < 9)
                str1 = eing;
            else
            {
                str1 = eing.Remove(8);
                str2 = eing.Remove(08);//Nach ende des durchlaufs enthält "str1" einen Zeichen langen String.
            }
           //----------------------------------------------------------------Verschlüsselungs Algo
            keysize = Aes.KeySize.Bits192;                          //Festlegung des bit stärke
            byte[] key = utf.GetBytes("00000");//****               //Schlüssel für verschlüsselung
            byte[] plainText = new byte[16];                        //Byte array der inhalt von str1 übernehmen soll
            byte[] cipherText = new byte[16];                       //Byte array das verschlüsselte Werte enthält
            plainText = Encoding.Unicode.GetBytes(str1.PadRight(8' '));//Plaintext bekommt inhalt von Str1 übergeben und füllt auf wenn nötig
            AesLib.Aes a = new Aes(keysize, key);                   //Instant von der Aes Klasse = a, übergabe von bit stärke und schlüssel
            a.Cipher(plainText, cipherText);                        //Verschlüsselung(input,output)
            str1 = Encoding.Unicode.GetString(cipherText);          //Rückwandlung von Bytearray in string
            outp = str1 + str2;                                     //Zusammenfügen der teilstrings
            textBox2.Text = outp;                                   //Ausgabe
           
         }
        private void button2_Click(object sender, EventArgs e)//ENT
        {
            string eing = textBox2.Text;
            string str1 = "";
            string str2 = "";
            string outp = "";
            if (eing.Length < 9)
                str1 = eing;
            else
            {
                str1 = eing.Remove(8);
                str2 = eing.Remove(08);
            }
            keysize = Aes.KeySize.Bits192;
            byte[] key = utf.GetBytes("00000");//****
            byte[] cipherText = new byte[16];
            byte[] decipheredText = new byte[16];
            cipherText = Encoding.Unicode.GetBytes(str1);
            AesLib.Aes a = new Aes(keysize, key);
            a.InvCipher(cipherText, decipheredText);
            str1 = Encoding.Unicode.GetString(decipheredText);
            outp = str1 + str2;
            textBox3.Text = outp;
        }
    }
}



Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Sa 29.03.2008 um 20:28
Spiritnight Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: So 30.03.08 05:58 
Titel: erledigt
Hat sich erledigt, habe gefunden wonach ich gesucht habe.

Mfg Martin
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 30.03.08 11:41 
Titel: Re: erledigt
user profile iconSpiritnight hat folgendes geschrieben:
Hat sich erledigt, habe gefunden wonach ich gesucht habe.

Mfg Martin

Wenn Du hier auch noch verrätst, was nicht gestimmt hat, würden sich andere sicher auch über die Korrektur des Quelltextes freuen.
Spiritnight Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: So 30.03.08 14:34 
Titel: 64bit
Du hast natürlich recht, ich dachte jedoch weil keiner was dazu sagte das es keinen Interessiert.

Ich habe in Englishen Forum gelesen das es mit ConverttoBase63String zusammenhängt und bin erneut auf die Suche gegangen und habe einen anderen Code Schnipzel gefunden den ich Problemlos anpassen konnte.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;

namespace Gamesecure
{
    class AES
    {
        private static byte[] EncryptString(byte[] clearText, byte[] Key, byte[] IV)
        {
            MemoryStream ms = new MemoryStream();
            Rijndael alg = Rijndael.Create();
            alg.Key = Key;
            alg.IV = IV;
            CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(clearText, 0, clearText.Length);
            cs.Close();
            byte[] encryptedData = ms.ToArray();
            return encryptedData;
        }

        public static string  EncryptString(string clearText, string Password)
        {

            byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
            PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x490x760x610x6e0x200x4d0x650x640x760x650x640x650x76 });
            byte[] encryptedData = EncryptString(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
            return Convert.ToBase64String(encryptedData);                  //Hier lag mein fehler
        }

        private static byte[] DecryptString(byte[] cipherData, byte[] Key, byte[] IV)
        {
            MemoryStream ms = new MemoryStream();
            Rijndael alg = Rijndael.Create();
            alg.Key = Key;
            alg.IV = IV;
            CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(cipherData, 0, cipherData.Length);
            cs.Close();
            byte[] decryptedData = ms.ToArray();
            return decryptedData;
        }

        public static string DecryptString(string cipherText, string Password)
        {
            byte[] cipherBytes = Convert.FromBase64String(cipherText);
            PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x490x760x610x6e0x200x4d0x650x640x760x650x640x650x76 });
            byte[] decryptedData = DecryptString(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16));
            return System.Text.Encoding.Unicode.GetString(decryptedData);

        }
    }
}



Mfg Martin