Kryptografie leicht gemacht

Kryptografie ist meist schwer verdaulich. Allerdings muss das nicht so sein, wie das CrypTool beweist. Dabei handelt es sich genau genommen um drei Anwendungen namens „CrypTool 1“, „CrypTool 2“ und „JCrypTool“. Diese unterscheiden sich dabei ein wenig z.B. bei den Betriebssystemen auf welchen sie laufen. Mit dem besagten Tools ist es möglich die verschiedenen Verschlüsselungsalgorithmen auszuprobieren und durch die Tutorien eine Menge zum Thema zu lernen.

CrypTool 2

CrypTool 2

Die offizielle Seite ist dabei unter http://www.cryptool.org zu finden. Daneben gibt es noch eine Onlineversion unter http://www.cryptool-online.org in welcher Themen Chiffren, Kodierung und Kryptoanalyse besprochen werden. Die Tools selbst sind freie Software und stehen unter der „Apache License v2.0“.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/CrypTool

Markdown in Scrivener

Für größere Texte nutze ich Scrivener und den iA Writer. Dieser unterstützt die Syntax für Markdown bzw. MultiMarkdown. Das wollte ich in Scrivener auch nutzen. Wenn man sich die Dokumentation von Scrivener anschaut, scheint es auch als ob Scrivener das ganze unterstützt. Allerdings findet man auf den ersten Blick nur ein Multimarkdown Im- und Export.

Also wurde der Support in Beschlag genommen und nachgefragt. Und es stellte sich heraus das Markdown doch nur im- und exportiert werden kann:

You’ll need to compile to MultiMarkdown format from Scrivener, then have MMD post-process the resulting file. To Scrivener, the MMD markup is just text. It has no way of knowing that you want to interpret it as formatting commands.

Schade, aber vielleicht klappt es ja in Zukunft mit der Markdown bzw. MultiMarkDown Unterstützung.

Robocode

Sich einen Roboter bauen und diese gegen andere Roboter kämpfen zu lassen, kann relativ schnell ins Geld und Material gehen. Einfacher wird es dabei mit Robocode, wobei es sich um eine Softwareumgebung handelt, in welcher Roboter programmiert werden können. Anschließend treten diese in einer virtuellen Arena gegeneinander an.

Die Bots im Kampf gegeneinander

Die Bots im Kampf gegeneinander

Geschrieben werden die Roboter in Java. Dabei finden sich eine Menge Beispiele in der Robocode Installation. Bei Robocode selbst handelt es sich um Open Source Software welche unter der Eclipse Public License steht. Die offizielle Webseite ist unter http://robocode.sourceforge.net/ zu finden. Lauffähig ist das ganze unter Linux, Mac OS X und Windows.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/Robocode

AddIn für den Reflector

Möchte man sich den IL-Code eines .NET Assemblies anschauen, so nutzt man dafür Tools wie NET.Reflector oder ILSpy. Für den Reflector gibt es dabei ein nettes AddIn welches auf den Namen „Reflector.FileDisassembler“ hört. Mit diesem ist es möglich ganze Assemblies in Visual Studio Projekt zu übersetzen. Zu finden ist das AddIn dabei unter http://www.denisbauer.com/NETTools/FileDisassembler.aspx.

Named Pipes zur Interprozesskommunikation

Interprozesskommunikation unter .NET ist so eine Sache. Da gibt es unter anderem das relativ mächtige Remoting Framework. Leider schlägt sich die Mächtigkeit auch in der Komplexität nieder. Wesentlich einfach wird das ganze mittels Named Pipes welche sich auch zur Interprozesskommunikation eignen. Dazu benötigt man einen Server und einen Client. Der Server könnte dabei unter .NET so aussehen:

Task.Factory.StartNew(() =>
{
	NamedPipeServerStream server=new NamedPipeServerStream("halfPipe");
	server.WaitForConnection();
	StreamReader reader=new StreamReader(server);
	StreamWriter writer=new StreamWriter(server);

	while(true)
	{
		string line=reader.ReadLine();
		
		if(line=="HELLO")
		{
			writer.WriteLine("Hi");
			writer.Flush();
		}
		else
		{
			writer.WriteLine("Unknown command.");
			writer.Flush();
		}
	}
});

Auf der Clientseite sieht die Kommunikation fast genauso aus:

NamedPipeClientStream pipeStream=new NamedPipeClientStream("halfPipe");
pipeStream.Connect();
StreamReader reader=new StreamReader(pipeStream);
StreamWriterwriter=new StreamWriter(pipeStream);

writer.WriteLine("HELLO");
writer.Flush();

string ret=reader.ReadLine();

Damit ist die Kommunikation zwischen den Prozessen eingerichtet. Natürlich kann man nicht nur Strings sondern auch andere Datentypen über die „Named Pipes“ verschicken.