| Cryptography & Encryption Ver- und Entschlüsselung, Algorithmen, Kryptoanalyse ? Kryptographie in der Praxis. Blowfish, Triple-DES, XOR u.a. |
Diskussion: Eigenen Algorhytmus testen im Forum Cryptography & Encryption, in der Kategorie Security Area; Hallo liebe Foren Gemeinde, ich habe ich habe ein Programm geschrieben, das beliebeigen Text verschlüsselt. Dazu verwendet es einen von ...
![]() |
| | #1 (permalink) |
| Registriert seit: 31.12.09 ![]() Likes: 0 | Hallo liebe Foren Gemeinde, ich habe ich habe ein Programm geschrieben, das beliebeigen Text verschlüsselt. Dazu verwendet es einen von mir geschriebenen Algorhytmus. Hier ist der Verschlüsselte Text; Code: 0ySEo{C6Rnât"oy_RJUnuo5DG1RSZÁ:H!PA%FUCWÓx"IFÉR5êGéz3rCÊy3NqÊjXêPzD7OAÂDRIF:EHWvÚz%qB$LR0sÚxYGú Code: private const string possibleChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!\"§$%&/()=?.:-_,;áéíóúÁÉÍÓÚâêîôûÂÊÎÔÛäöü+*~'#[]{}\\<>| _";
public static string CryptText(string text, string password, int keyLength)
{
if (password == "")
password = "Standard";
string crypted = string.Empty;
char[] key = new char[keyLength];
char[] pass = password.ToCharArray();
int seed = DateTime.Now.Minute * 60000 + DateTime.Now.Second * 1000 + DateTime.Now.Millisecond;
Random rand = new Random(seed);
for (int i = 0; i < keyLength; i++)
{
key[i] = getChar(rand.Next(0, possibleChars.Length - 1));
}
for (int i = 0; i < keyLength; i++)
{
crypted += CryptChar(key[i], password[i % password.Length]);
}
//Text verschlüsseln
for (int i = 0; i < text.Length; i++)
{
char c1 = CryptChar(pass[i % pass.Length], text[i]);
crypted += CryptChar(c1, key[i % keyLength]);
}
return crypted;
}
private static char CryptChar(char c1, char c2)
{
if (possibleChars.Contains(c1) && possibleChars.Contains(c2))
{
int c1ID = 0;
int c2ID = 0;
for (int i = 0; i < possibleChars.Length; i++)
{
if (possibleChars[i] == c1)
c1ID = i;
if (possibleChars[i] == c2)
c2ID = i;
}
return getChar(c1ID + c2ID);
}
return '_';
}
private static char getChar(int id)
{
if (id >= 0)
{
return possibleChars[id % (possibleChars.Length - 1)];
}
else
{
return possibleChars[(possibleChars.Length - 1) + id];
}
} Download: http://www.megaupload.com/?d=CMZOJ6R8 Mirror: http://rapidshare.com/files/32846478...elung.exe.html Wenn ihr einen Fehler findet, sagt es bitte. Und wenn es hilft: Der Schlüssel ist 5 Stellen lang, das Passwort ist 8 stellen lang. Viele grüsse, FlySoft |
| | |
| | #2 (permalink) |
| Designschwachstelle: Es werden nicht alle Zeichen unterstützt. Kannst du das nicht irgendwie über Unicode-Zeichencodes lösen?
__________________ | |
| | |
| HaBOT | |
| |
| | #3 (permalink) |
| Themenstarter Registriert seit: 31.12.09 ![]() Likes: 0 | Ich werde das mal Probieren, und sehen, wo ich in C# eine Liste mit darstellbaren Zeichen finde... |
| | |
| | #4 (permalink) |
| Registriert seit: 03.01.10 ![]() Likes: 0 | Hi, vorweg kenn ich zwar die Sprache deiner Implementierung nicht, aber mir fällt auf dass du eine Art Substitutions Chiffrierung verwendest. Diese ist schon von Haus aus nicht sicher. Nimm dir mal ca. 200 Chriffren und wende eine Häufigkeitsanalyse darauf an. Dauert von Hand keine 20 min und deine Chiffrierung ist gebrochen. Ich rate dir für Heimanwendungen eher zum OTP (One Time Pad) oder zu einer Feistel Chiffre. Gruß |
| | |
| | #5 (permalink) |
| Registriert seit: 20.07.06 ![]() Likes: 18 | Ja weil es auch so einfach ist unmengen Zufallszahlen mittels eine TRNG zu erzeugen... |
| | |
| | #6 (permalink) |
| Registriert seit: 03.01.10 ![]() Likes: 0 | jupp, Linear Feedback Shift Register, siehe GSM und andere Handy Netze... Aber selbst ein PRNG ist besser als eine Substitution. Für halbwegs ordentliche Dinge gibt es AES Klassen in so ziemlich jeder Sprache. |
| | |
| | #7 (permalink) |
| Registriert seit: 20.07.06 ![]() Likes: 18 | du weißt schon, das ein PRNG ala LFSR nicht sicher ist, da man dies ohne Probleme mit nem Gaußverfahren innerhalb von Minuten brechen kann, wenn man die ersten 2(m-1) Bits hat?Wenn du schon was empfiehlst dann gleich was richtiges und keine halben Sachen. |
| | |
| | #8 (permalink) |
| Registriert seit: 03.01.10 ![]() Likes: 0 | Es ist mir bekannt dass sich bei bekanntem x0 bis x2m-1 lässt sich der LFSR berechnen lässt, wobei m gleich der Anzahl an FlipFlops mit Schalter oder vergleichbares und x Klartext Bits ist. FlySOft wollte etwas zu seinem Algo hören, ich habe ihm eine Schwachstelle gezeigt. Eine Grudsatz Disskussion zu RNGs ala LFSR und LCG ist glaube ich hier nicht gewünscht. Außerdem wissen wir nichts über die geplante Anwendung von FlySofts Algo. Deshalb ist der OTP als Vorlage durchaus noch im Rennen. Auf Feist und AES habe ich ebenfalls schon verwiesen. |
| | |
| | #9 (permalink) |
| Deine zufallszahlen sind nicht dafür geeignet. nimm mal SecureRandom oder BigInteger's integrierten Algorithmus. Das ist doch Java oder? | |
| | |
| | #10 (permalink) |
| Themenstarter Registriert seit: 31.12.09 ![]() Likes: 0 | Nö, das ist C#. Mir ist überigens selber der Bug aufgefallen, der das entschlüsseln sehr einfach möglich macht. Wenn die ersten paar zeichen vom Passort stimmen, also der Key korrekt entschlüsselt wird, und das passwort die richtige länge hat, dann lässt sich der Rest sehr leichtrausfinden. Wenn man z.B. einen Teil der Nachricht kennt, lässt sich jedes Zeichen ausprobieren und dadurch das Passwort erraten bzw. entschlüsseln. FlySoft Geändert von FlySOft (09.01.10 um 14:21 Uhr) |
| | |
![]() |
| | |
| |
| Themen-Optionen | |
| Ansicht | |
| |