Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Coding Releases
You last visited: Today at 06:40

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C# 2010] File Cryption Class

Discussion on [C# 2010] File Cryption Class within the Coding Releases forum part of the Coders Den category.

Reply
 
Old   #1
 
King Sora's Avatar
 
elite*gold: 6394
Join Date: Nov 2008
Posts: 1,225
Received Thanks: 4,765
[C# 2010] File Cryption Class

Heyho!

Das hier ist mein erstes release in der Coding-Section! Ich habe mich in meiner Freizeit mal für eine kurze Zeit hingesetzt und ein Programm zum verschlüsseln von Dateien geschrieben!

Ich release hier die Klasse zum ver- und entschlüsseln und das Programm.
Das Programm ist komplett selbst geschrieben, ich habe keine ausschnitte aus Google o.ä. benutzt!
Es ist mein erster Versuch etwas zu verschlüsseln und ich würde euch bitten mir ein
Feedback zu dieser Verschlüsselung zu geben! (sicher, unsicher, gut, schlecht)

Ich kann das nämlich noch nicht zu gut einschätzen..

Um das Programm ausführen zu können, braucht ihr Framework 4.0 oder höher!
Das Programm kann gleichzeitig ent- und verschlüsseln!

Screen:

fileCryption Class:
PHP Code:
using System;
using System.IO;
using System.Windows.Forms;


class 
fileCryption
{

    
/*############################# */
    /*########### Core ############ */
    /*############################# */

    
public bool enCode(string srcFilestring dstFilestring _keybool repRequest)
    {
        if (
this.enC_check(srcFiledstFile_key) == false
        { return 
false; }

        
FileInfo fileinfo = new FileInfo(srcFile);

        
char[] key _key.ToCharArray();
        
byte[] originalBytes File.ReadAllBytes(srcFile);
        
byte[] verschlBytes = new byte[originalBytes.Length + (fileinfo.Name.Length fileinfo.Extension.Length) + fileinfo.Extension.Length 3];
        
char[] srcNam fileinfo.Name.ToCharArray();

        
this.enCode_originalBytes(originalBytesverschlBytesthis.key_calcValue(key));
        
this.enCode_srcNam(originalBytesverschlBytessrcNam);
        
this.enCode_reverse_verschlBytes(originalBytesverschlBytes);
        Array.
Reverse(verschlBytes);
        
this.enCode_permutation(ref verschlByteskey);

        if (
this.fileWrite(dstFileverschlBytesrepRequest) == false)
        { return 
false; }
        else
        { return 
true; }
    }

    public 
bool deCode(string srcFilestring dstPathstring _keybool repRequest)
    {
        if (
this.deC_check(srcFiledstPath_key) == false)
        { return 
false; }

        
FileInfo fileinfo = new FileInfo(srcFile);

        
char[] key _key.ToCharArray();
        
byte[] verschlBytes File.ReadAllBytes(srcFile);
        
        
this.deCode_permutation(ref verschlByteskey);
        Array.
Reverse(verschlBytes);
        
this.deCode_reverse_verschlBytes(verschlBytes);

        
string srcNam this.deCode_srcNam(verschlBytes);
        if (
srcNam == null || srcNam == "")
        { 
MessageBox.Show("Die Datei hat das falsche Format oder der Schlüssel ist falsch!""Error"MessageBoxButtons.OKMessageBoxIcon.Error); return false; }
        
dstPath += srcNam;

        
this.deCode_srcNam_bytes(ref verschlBytessrcNam);
        
this.deCode_verschlBytes(ref verschlBytesthis.key_calcValue(key));

        if (
this.fileWrite(dstPathverschlBytesrepRequest) == false)
        { return 
false; }
        else
        { return 
true; }
    }

    public 
bool fileWrite(string dstFilebyte[] verschlBytesbool repRequest)
    {
        if (!
File.Exists(dstFile))
        {
            try
            {  
File.WriteAllBytes(dstFileverschlBytes); return true; }
            catch
            { return 
false; }
        }
        else
        {
            if (
repRequest == true)
            {
                
DialogResult ersetzen MessageBox.Show("Die Datei:" "\n" dstFile "\n" "existiert bereits, möchtest du diese Datei ersetzen?""Datei ersetzen"MessageBoxButtons.YesNoMessageBoxIcon.QuestionMessageBoxDefaultButton.Button2);
                if (
ersetzen == DialogResult.Yes)
                {
                    try
                    { 
File.WriteAllBytes(dstFileverschlBytes); return true; }
                    catch
                    { return 
false; }
                } 
                else if (
ersetzen == DialogResult.No)
                { return 
false; }
            }
            else if (
repRequest == false)
            {
                try
                { 
File.WriteAllBytes(dstFileverschlBytes); return true; }
                catch
                { return 
false; }
            }
            return 
false;
        }
    }


    
/*############################# */
    /*###### Verschlüsselung ###### */
    /*############################# */

    
private byte[] enCode_reverse_verschlBytes(byte[] originalBytesbyte[] verschlBytes)
    {
        
int foreachCount 0;
        foreach (
byte b in verschlBytes)
        {
            
verschlBytes[foreachCount] = (byte)(~b);
            
foreachCount++;
        }
        return 
verschlBytes;
    }

    private 
byte[] enCode_srcNam(byte[] originalBytesbyte[] verschlByteschar[] srcNam)
    {
        
char[] namLen srcNam.Length.ToString("000").ToCharArray();

        for (
int i originalBytes.LengthverschlBytes.Length-3i++)
        {
            
verschlBytes[i] = (byte)((char)(srcNam[originalBytes.Length]));
        }
        for (
int i 03i++)
        {
            
verschlBytes[(verschlBytes.Length 3) +i] = (byte)(namLen[i]);
        }
        return 
verschlBytes;
    }

    private 
byte[] enCode_originalBytes(byte[] originalBytesbyte[] verschlBytesint wert)
    {
        
int foreachCount 0;
        foreach (
byte b in originalBytes)
        {
            
verschlBytes[foreachCount] = (byte)(this.byteOverflow(wert));
            
foreachCount++;
        }
        return 
verschlBytes;
    }

    private 
byte[] enCode_permutation(ref byte[] verschlByteschar[] key)
    { 
        
int round_one 0;
        
int round_two 1;
        
int round_thr 2;
        
int additiv 3;
        
int foreachCount 0;

        foreach (
byte b in verschlBytes)
        {
            if (
foreachCount == round_one)
            {
                for (
int i 0this.key_roundValue(key); i++)
                {
                    
verschlBytes[foreachCount] = (byte)((>> << 6) ^ (key[1]));
                }
                
round_one += additiv;
            }
            if (
foreachCount == round_two)
            {
                for (
int i 0this.key_roundValue(key); i++)
                {
                    
verschlBytes[foreachCount] = (byte)((>> << 6) ^ (key[3]));
                }
                
round_two += additiv;
            }
            if (
foreachCount == round_thr)
            {
                for (
int i 0this.key_roundValue(key); i++)
                {
                    
verschlBytes[foreachCount] = (byte)((>> << 6) ^ (key[5]));
                }
                
round_thr += additiv;
            }
            
foreachCount++;
            
additiv += 1;
        }
        return 
verschlBytes;
    }


    
/*############################# */
    /*###### Entschlüsselung ###### */
    /*############################# */

    
private byte[] deCode_reverse_verschlBytes(byte[] verschlBytes)
    {
        
int foreachCount 0;
        foreach (
byte b in verschlBytes)
        {
            
verschlBytes[foreachCount] = (byte)(~b);
            
foreachCount++;
        }
        return 
verschlBytes;
    }

    private 
string deCode_srcNam(byte[] verschlBytes)
    {
        
string srcNam null;
        
char[] sourceName;
        
char[] lenChars = new char[3];

        for (
int i 03i++)
        {
            
lenChars[i] = (char)(verschlBytes[(verschlBytes.Length 3) + i]);
        }

        
string dumpLen null;
        foreach (
char c in lenChars)
        {
            
dumpLen += (c.ToString());
        }
        
int nameLength 0;
        try
        {
            
nameLength int.Parse(dumpLen);
        }
        catch
        {
            return 
null;
        }

        
sourceName = new char[nameLength];
        for (
int i 0nameLengthi++ )
        {
            
sourceName[i] = (char)verschlBytes[(verschlBytes.Length-3) - i-1];
        }

        Array.
Reverse(sourceName);
        for (
int i 0nameLengthi++)
        {
            
srcNam += sourceName[i].ToString();
        }
        return 
srcNam;
    }

    private 
byte[] deCode_srcNam_bytes(ref byte[] verschlBytesstring srcNam)
    {
        
byte[] verschlBytes_new verschlBytes;
        
verschlBytes = new byte[verschlBytes.Length srcNam.Length 3];

            
        
int foreachCount 0;
        foreach (
byte b in verschlBytes)
        {
            
verschlBytes[foreachCount] = verschlBytes_new[foreachCount];
            
foreachCount++;
        }
        return 
verschlBytes;
    }

    private 
byte[] deCode_verschlBytes(ref byte[] verschlBytesint wert)
    {
        
int foreachCount 0;
        foreach (
byte b in verschlBytes)
        {
            
verschlBytes[foreachCount] = (byte)(this.byteOverflow(wert));
            
foreachCount++;
        }
        return 
verschlBytes;
    }

    private 
byte[] deCode_permutation(ref byte[] verschlByteschar[] key)
    {
        
int round_one 0;
        
int round_two 1;
        
int round_thr 2;
        
int additiv 3;
        
int foreachCount 0;
        foreach (
byte b in verschlBytes)
        {
            if (
foreachCount == round_one)
            {
                for (
int i 0this.key_roundValue(key); i++)
                {
                    
verschlBytes[foreachCount] = (byte)(^ (key[1]));
                    
verschlBytes[foreachCount] = (byte)((verschlBytes[foreachCount] << verschlBytes[foreachCount] >> 6));
                }
                
round_one += additiv;
            }
            if (
foreachCount == round_two)
            {
                for (
int i 0this.key_roundValue(key); i++)
                {
                    
verschlBytes[foreachCount] = (byte)(^ (key[3]));
                    
verschlBytes[foreachCount] = (byte)((verschlBytes[foreachCount] << verschlBytes[foreachCount] >> 6));
                }
                
round_two += additiv;
            }
            if (
foreachCount == round_thr)
            {
                for (
int i 0this.key_roundValue(key); i++)
                {
                    
verschlBytes[foreachCount] = (byte)(^ (key[5]));
                    
verschlBytes[foreachCount] = (byte)((verschlBytes[foreachCount] << verschlBytes[foreachCount] >> 6));
                }
                
round_thr += additiv;
            }
            
foreachCount++;
            
additiv += 1;
        }
        return 
verschlBytes;
    }


    
/*############################# */
    /*######## Allgemeines ######## */
    /*############################# */

    
private int key_calcValue(char[] key)
    {
        
int calcValue 0;
        
int foreachCount 0;
        foreach (
byte b in key)
        {
            
calcValue += (int)(b);
            if (
foreachCount == 3)
            {
                
calcValue += (int)(b);
            }
            
foreachCount++;
        }
        return 
calcValue;
    }

    private 
int key_roundValue(char[] key)
    {
        
int rounds 0;
        foreach (
byte b in key)
        {
            
rounds += (int)((b/2) + Math.PI);
        }
        return 
rounds;
    }

    private 
byte byteOverflow(int oldByte)
    {
        
byte newByte;
        if (
oldByte 255)
        {
            
newByte = (byte)(oldByte 255);
        }
        else if (
oldByte 0)
        {
            
newByte = (byte)(oldByte 255);
        }
        else
        {
            
newByte = (byte)oldByte;
        }
        return 
newByte;
    }


    
/*############################# */
    /*########### Checks ########## */
    /*############################# */

    
private bool enC_check(string srcFilestring dstFilestring key)
    {
        if (
srcFile == "" || !File.Exists(srcFile) == true)
        {
            
MessageBox.Show("Bitte einen gültigen Dateipfad angeben!""Error"MessageBoxButtons.OKMessageBoxIcon.Exclamation);
            return 
false;
        }
        if (
key == "" || key.Length != 6)
        {
            
MessageBox.Show("Bitte einen gültigen Schlüssel angeben!""Error"MessageBoxButtons.OKMessageBoxIcon.Stop);
            return 
false;
        }
        if (
dstFile == "")
        {
            
MessageBox.Show("Bitte ein gültiges Speicherverzeichnis mit Dateinamen angeben!""Error"MessageBoxButtons.OKMessageBoxIcon.Exclamation);
            return 
false;
        }
        else
        {
            return 
true;
        }
    }

    private 
bool deC_check(string srcFilestring dstPathstring key)
    {
        if (
srcFile == "" || srcFile == "Datei per Drag & Drop reinziehen oder auswählen" || !File.Exists(srcFile) == true)
        {
            
MessageBox.Show("Bitte einen gültigen Dateipfad angeben!""Error"MessageBoxButtons.OKMessageBoxIcon.Exclamation);
            return 
false;
        }
        if (
key == "" || key.Length != 6)
        {
            
MessageBox.Show("Bitte einen gültigen Entschlüsselungs-Schlüssel eingeben!""Error"MessageBoxButtons.OKMessageBoxIcon.Stop);
            return 
false;
        }
        if (
dstPath == "" || !Directory.Exists(dstPath) == true)
        {
            
MessageBox.Show("Das Ausgabeverzeichnis ist nicht verfügbar oder existiert nicht!""Error"MessageBoxButtons.OKMessageBoxIcon.Exclamation);
            return 
false;
        }
        else
        {
            return 
true;
        }
    }

In der Klasse werden die WindowsForms nur für die Ausgabe der Fehler benutzt! Wenn ihr die Fehler anders ausgeben wollt, dann funktioniert sie problemlos auch ohne WindowsForms!

Im Anhang habe ich euch das Programm und die Klasse hochgeladen!
Ich wünsche euch viel Spaß damit und bitte euch um Feedback!!


Attached Files
File Type: zip file Cryption by Sora.zip (286.4 KB, 11 views)
King Sora is offline  
Thanks
6 Users
Old 03/23/2013, 14:41   #2
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Ohne mir die Verschlüsselung genauer angesehen zu haben:
Quote:
In der Klasse werden die WindowsForms nur für die Ausgabe der Fehler benutzt!
Das ist schlecht. Lass die Klasse ne Exception werfen oder so, aber lass sie unabängig ner GUI oder ähnlichem. Auch Messageboxen sind hier schlecht.

Benutze ausserdem die Standard-Notation von .NET. Klasse und Methoden also CamelCase formatieren.
Schlüsselbein is offline  
Thanks
1 User
Old 03/23/2013, 15:10   #3
 
King Sora's Avatar
 
elite*gold: 6394
Join Date: Nov 2008
Posts: 1,225
Received Thanks: 4,765
Quote:
Originally Posted by Schlüsselbein View Post
Ohne mir die Verschlüsselung genauer angesehen zu haben:

Das ist schlecht. Lass die Klasse ne Exception werfen oder so, aber lass sie unabängig ner GUI oder ähnlichem. Auch Messageboxen sind hier schlecht.

Benutze ausserdem die Standard-Notation von .NET. Klasse und Methoden also CamelCase formatieren.
Ja... ich weiß!.. Desshalb habe ich das auch dazu geschrieben. Es war nur dazu gedacht, um Fehler deutlich anzuzeigen. Die Klasse funktionier auch sehr gut ohne.

Kannst du mir das genauer erklären? Entschuldige falls das Pflichtwissen ist.

Die WindowsForms werden nur wegen den Messageboxen benutzt. Wie gesagt, sie sollten die Fehler nur genau erklärn.. funktionieren würde es ohne sie auch.

Ich danke dir sehr für dein Feedback! Wenn du Zeit findest kannst du mir zur Verschlüsselung auch noch etwas schreiben

MfG. Sora
King Sora is offline  
Old 03/23/2013, 15:20   #4
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869

Hier steht nach erstem Suchen eigentlich alles wichtige. Unten sind noch weiterführende Links. Vorteil ist halt ganz klar, dass man die Klasse dann auch einfach in ner Konsolen-, Web, -WPF, -GTK-Applikation benutzen kann.
Was, wenn jemand den Fehler anders behandeln will? Wenn jemand den Fehler einfach in nen Log schreiben möchte? Wenn jemand den Fehler in ner anderen Sprache ausgeben möchste usw. usf. ich denke du weißt, warum es wichtig ist.

Zum zweiten Punkt:

Quote:
Wenn du Zeit findest kannst du mir zur Verschlüsselung auch noch etwas schreiben
Zeitlich wirds eher schlecht. Aber es gibt hier genügend kompetente User, welche dazu sicher ihre Kritik abgeben werden.




Gruß
Schlüsselbein is offline  
Old 03/29/2013, 04:00   #5
 
King Sora's Avatar
 
elite*gold: 6394
Join Date: Nov 2008
Posts: 1,225
Received Thanks: 4,765
Danke für die Links! Haben geholfen

Quote:
Originally Posted by Schlüsselbein View Post
Aber es gibt hier genügend kompetente User, welche dazu sicher ihre Kritik abgeben werden.
Gruß
Das möchte ich hoffen... Mich würde es nämlich sehr interessieren was jemand darüber denkt der sich mit sowas sehr gut auskennt.

MfG.
King Sora is offline  
Reply


Similar Threads Similar Threads
.class File Editor
04/03/2012 - General Coding - 0 Replies
Hey, suche einen class File Editor.Der Editor sollte Strings, Arrays, usw. editieren können.Ich habe schon einen Editor gefunden jedoch muss mann bei diesem jedes Element einzeln editieren bzw. markieren um es zu löschen. Ich suche einen Editor der Variablen markierbar macht, damit ich mehrere Variablen auf einmal löschen kann. MFG warpig12
[JAVA] .jar-File [,,Could not find the main class - program will exit"]
10/28/2011 - General Coding - 6 Replies
Hallo. Habe heute mit Eclipse eine kleine GUI (swing) Anwendung geschrieben und wollte diese in ein .jar.Archiv packen. (IDE : eclipse). Nun suche ich schon seit Stunden nach einer Lösung für das Problem, denn wenn ein Freund von mir auf seinem Rechner diese jar Datei starten möchte, erscheint die Fehlermeldung : "could not find the main class - program will exit". Vllt. weiß jemand von euch weiter... lg
[Help]2010-er server file, game file, anything..
04/10/2011 - Metin2 Private Server - 0 Replies
Hi all!:) Before everything, I've used the searcher, but I haven't found the answers. I hope you can help me. Problem 1. I downloaded the 2010-er server file http://www.elitepvpers.com/forum/metin2-pserver-gui des-strategies/1076953-release-2010er-serverfiles- 1675-noob-edition.html]. I installed this, everything is okay, but when I launch the game, before loading, the client is closed, and the Windows writes "metin2.exe working stopped". What have to do? Problem 2. It's about also...



All times are GMT +1. The time now is 06:41.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.