Copying sources and texts (also in parts) for publishing without our permission is NOT ALLOWED. We are fed up with finding our work on other sites (like stackoverflow).
Das Kopieren von Quellcode und Texten (auch in Auszügen) ist nicht erlaubt. Wir haben es gründlich satt, unsere Arbeit auf anderen Webseiten zu finden.

Copying for non-public usage is allowed.           Das private Kopieren und Benutzen ist natürlich erlaubt und erwünscht.

Kategorie "Sicherheit"

07. Jul 2009
Teaser

mySQL: Alte MD5 Passwörter – OLD_PASSWORD()

In alten mySQL Versionen (vor V4.1) wurde für die Passwortverschlüsselung ein 16 Zeichen langer MD5 Hash genutzt (sh. auch unseren Arikel “Sicherheit: MD5 Hash decodieren / entschlüsseln (16 stelligen Hash)“).

Diese Technik war (und ist) unsicher und daher wurde ab Version 4.1 auf den 32 Zeichen langen MD5 Hash umgestiegen. Dieser gilt heute als Standard MD5 Hash und wird in allen gängigen Umgebungen und Systemen gleich berechnet.

Um nun bei Bedarf trotzdem noch den alten Hash erzeugen zu können (z.Bsp. müssen Sie verschlüsselte Passwörter vergleichen), stellen wir Ihnen einige Tools zur Verfügung:

  • Online Hash Berechnung
    Diese liefert Ihnen gleichzeitg ein paar weitere Hash Werte Ihrer Eingabe:
    md5, crypt, crc32, metaphone, sha1, soundex, str_rot13
  • Das C Programm für Linux Distributionen
  • Ein C# Programm für MS-Windows

Sollten Sie Fragen oder konstruktive Kritik haben, schreiben Sie uns gerne eine E-Mail.

Online Hash Berechnung

Bitte geben Sie das Passwort in das folgende Feld ein und klicken Sie auf “Hash erzeugen”:



Ihnen wird der Hash unterhalb dieser Zeile angezeigt:

“;
else { echo

“.

“.
// “

“.

“.

“.

“.

“.

“.

“.

“;
}
?>

Keine Eingabe.
Ihr Passwort ” . $_REQUEST[“pwd”] . “
MD5 (32 Hash) ” . md5($_REQUEST[“pwd”]) . “
MD5 (16 Hash) ” . md5($_REQUEST[“pwd”]) . “
Crypt (php) ” . crypt($_REQUEST[“pwd”]) . “
CRC32 (php) ” . crc32($_REQUEST[“pwd”]) . “
Base64 (php) ” . base64_encode($_REQUEST[“pwd”]) . “
Metaphone (php) ” . metaphone($_REQUEST[“pwd”]) . “
SHA1 (php) ” . sha1($_REQUEST[“pwd”]) . “
SoundEX (php) ” . soundex($_REQUEST[“pwd”]) . “
ROT13 (Cäsar-Code) ” . str_rot13($_REQUEST[“pwd”]) . “

C Programm (Linux / UNIX)

Nutzen Sie folgenden Download-Link für die compilierte Version. Sollten Sicherheitsbeschränkungen den Download der Software verhindern, versuchen Sie das ZIP oder TAR.GZ Archiv zu laden:
[download id=”2″]
[download id=”3″]
[download id=”4″]

C# Programm für MS-Windows

Diese MS-Windows Version folgt in den nächsten Tagen – und wie immer natürlich kostenlos.

07. Jul 2009
Teaser

Sicherheit: MD5 Hash decodieren / entschlüsseln (16 stelligen Hash)

Der folgende C Source kann ggf. Ihnen helfen, vergessene MD5 Passwörter (nur 16-stelligen Hash) wieder zu erhalten. Dabei werden nur Passwörter mit bis zu 8 Zeichen berechnet. Außerdem können nicht alle Sonderzeichen berücksichtigt werden. Von Decodieren bzw. Entschlüsseln kann aufgrund der angewendeten Methoden nicht geredet werden. Das genannte MD5 Verfahren hat mathematische Lücken und wurde daher bereits ab mySQL Version 4.1 durch den stärken und (bislang sicheren) MD5/32 Hash abgelöst. Hinweis: Den Sourcecode nutzen Sie vollständig auf eigene Gefahr und Verantwortung. Bitte prüfen Sie vorher, ob Sie berechtigt sind, den MD5 Hash zu berechnen. Sollten Sie Zweifel haben, nutzen Sie die Methoden nicht ! Um Ihnen nicht den vollständigen Source zu liefern (und jedem Hobby-Passwort-Analysten die Berechnung zu erlauben) haben wir die wichtigen Bitverschiebungen im Source durch Smileys ersetzt. Für erfahrene Entwickler wird das Herausfinden und Ersetzen der entsprechenden Sourcecode-Positionen kein Problem darstellen. Zusätzlich bleibt der Source äußerst karg kommentiert.

// Tools zur Decodierung von 16stelligen MD5 Hashes
// Verwendet von mySQL OLD_PASSWORT() etc.

#include "stdlib.h"
#include "stdio.h"
#include "string.h"

#define xor ^

void search3_new( );
void search4_new( );
void search5_new( );
void search6_new( );
void search7_new( );
void search8_new( );
void get_old_nr2( );
void init_password( );
void found_footprint( );

int search_extension(unsigned long nrd, unsigned long nr2d, unsigned long add1d);
char footprint_str[32];
int len3=0, len4=0, len5=0, len6=0, len7=0, len8=0, len9=0, len10=0, lenall=1;

unsigned char char1, char2, char3, char4, char5, char6, char7, char8, char9, char10;
unsigned char extension_char1, extension_char2, extension_char3;
unsigned long nr2_g2_expected1_genuine;
unsigned long nr2_g2_expected2_genuine;
unsigned long nr2_g3;
unsigned long nr2_g3plus;
unsigned long nr2_expected;
unsigned long footprint1;
unsigned long footprint2;

int hexdigit_value(char c) {
  if (c >= '0' && c <= '9' ) return c - '0';
  if (c >= 'a' && c <= 'f' ) return c - 'a' + 10;
  if (c >= 'A' && c <= 'F' ) return c - 'A' + 10;  

  printf("Fehler: '%c' ist kein Hex-Wert\r\n", c);
  exit(0);
  return 0;
}

int main(int argc, char **argv) {
  int p;

  if (argc!=2 || (argc >= 2 && strcmp(argv[1], "--help") == 0)) {
    printf("Syntax  : %s [MD5 Hash]\r\n", argv[0] );
    printf("Beispiel: %s 565491d704013245 (liefert das Passwort \"123456\")\r\n", argv[0]);
    exit(0);
  }

  char * args = argv[1];

  if (strlen(args) != 16 ) {
        printf("Fehler: '%s' ist kein MD5 Hash (16 Hex-Zeichen)\r\n", args);
        exit(1);
  }

   // Hash holen
  strcpy(footprint_str, args);
  unsigned long f1=0, f2=0;

  int q;
  for (q = 0; q < 8; q++) {
    f1 = (f1 << 4) + hexdigit_value(args[q]);
    f2 = (f2 << 4) + hexdigit_value(args[q+8]);
  }

  footprint1 = f1;
  footprint2 = f2;

  // Initialisierungen
  get_old_nr2();
  init_password();

  // Suche
  search3_new();
  search4_new();
  search5_new();
  search6_new();
  search7_new();
  search8_new();
  printf("Das Passwort hat wohl mehr als 8 Zeichen ...\r\n");

  return(0);
}

void init_password(  ) {
  char1  = 0;
  char2  = 0;
  char3  = 0;
  char4  = 0;
  char5  = 0;
  char6  = 0;
  char7  = 0;
  char8  = 0;
  char9  = 0;
  char10 = 0;
}

void get_old_nr2() {
  unsigned long old_nr2_value;
  int old_nr2[8] ;
  int new_nr2[8] ;
  int new_nr[8];
  int carry[8] ;
  int p;

  for (p = 0; p < 8; p++) {
    old_nr2[p] = 0;
    new_nr2[p] = 0;
    new_nr[p]  = 0;
    carry[p]   = 0;
  }

  new_nr[1] = footprint1 & 255;
  new_nr[2] = (footprint1 >>  8 ) & 255;
  new_nr[3] = (footprint1 >> 16 ) & 255;
  new_nr[4] = (footprint1 >> 24 ) & 255;

  new_nr2[1] = footprint2 & 255;
  new_nr2[2] = (footprint2 >>  8 ) & 255;
  new_nr2[3] = (footprint2 >> 16 ) & 255;
  new_nr2[4] = (footprint2 >> 24 ) & 255;

  for (p=1; p<=4; p++) {
    unsigned long tmp;
    tmp = old_nr2[p-1] ^ new_nr[p];
    old_nr2[p] = new_nr2[p] - carry[p] - tmp;

    if (old_nr2[p] < 0 ) {
      carry[p+1]  = 1;
      old_nr2[p] += 256;
    }
  }

  old_nr2_value = (old_nr2[1] | (old_nr2[2] << 8) | 
                  (old_nr2[3] << 16) | (old_nr2[4] << 24) ) & 0x7FFFFFFF;

  nr2_g2_expected1_genuine = old_nr2_value & 0x7FF00000;
  nr2_g2_expected2_genuine = (old_nr2_value - 0x100000) & 0x7FF00000;
  nr2_expected = old_nr2_value;
  nr2_g3 = nr2_g2_expected1_genuine & 0x70000000;
  nr2_g3plus = (nr2_g2_expected1_genuine + 0x10000000) & 0x70000000;
}

void found_footprint() {
  char password[256], *ps;
  int p;
  ps = password;

  if (char1) *ps++ = char1;
  if (char2) *ps++ = char2; 
  if (char3) *ps++ = char3; 
  if (char4) *ps++ = char4;
  if (char5) *ps++ = char5;
  if (char6) *ps++ = char6;
  if (char7) *ps++ = char7;

  *ps++ = extension_char1;
  *ps++ = extension_char2;
  *ps++ = extension_char3;
  *ps   = 0;

  // Gefundenes Passwort anzeigen
  printf("%s = %s\r\n", footprint_str, password);
  exit(0);
}

void search3_new() {
  unsigned long nr = 1345345333L, add = 7, nr2 = 0x12345671L;
  if (search_extension(nr, nr2, add))
    return;
}

void search4_new() {
  unsigned long nr = 1345345333L, add = 7, nr2 = 0x12345671L;

  for (char1 = 33; char1 < 127; char1++) {
    nr  = 1345345333L;
    add = 7;
    nr2 = 0x12345671L;
    nr  ^= (((nr & 63) + add) * (unsigned long)char1) + (nr << 8);
    nr2 += (nr2 << 8) ^ nr;
    add += char1;

    if (search_extension(nr, nr2, add))
        return;
  }
}

void search5_new() {
  unsigned long nr = 1345345333L, add = 7, nr2 = 0x12345671L;

  for (char1 = 33; char1 < 127; char1++)
    for (char2 = 33; char2 < 127; char2++) {
      nr  = 1345345333L;
      add = 7;
      nr2 = 0x12345671L;

      nr  ^= (((nr & 63) + add) * (unsigned long)char1) + (nr << 8);
      nr2 += (nr2 << 8) ^ nr;
      add += char1;

      nr  ^= (((nr & 63) + add) * (unsigned long)char2) + (nr << 8);
      nr2 += (nr2 << 8) ^ nr;
      add += char2;

      if (search_extension(nr, nr2, add))
          return;
  }
}

void search6_new() {
  unsigned long nr = 1345345333L, add = 7, nr2 = 0x12345671L;

  for (char1 = 33; char1 < 127; char1++)
    for (char2 = 33; char2 < 127; char2++)
        for (char3 = 33; char3 < 127; char3++) {
          nr  = 1345345333L;
          add = 7;
          nr2 = 0x12345671L;

          nr  ^= (((nr & 63) + add) * (unsigned long)char1) + (nr << 8);
          nr2 += (nr2 << 8) ^ nr;
          add += char1;

          nr  ^= (((nr & 63) + add) * (unsigned long)char2) + (nr << 8);
          nr2 += (nr2 << 8) ^ nr;
          add += char2;

          nr  ^= (((nr & 63) + add) * (unsigned long)char3) + (nr << 8);
          nr2 += (nr2 << 8) ^ nr;
          add += char3;

          if (search_extension(nr, nr2, add)) return;
  }
}

void search7_new() {
  unsigned long nr = 1345345333L, add = 7, nr2 = 0x12345671L;

  for (char1 = 33; char1 < 127; char1++)
    for (char2 = 33; char2 < 127; char2++)
        for (char3 = 33; char3 < 127; char3++)
          for (char4 = 33; char4 < 127; char4++) {
               nr  = 1345345333L;
          add = 7;
          nr2 = 0x12345671L;

              nr  ^= (((nr & 63) + add) * (unsigned long)char1) + (nr << 8);
              nr2 += (nr2 << 8) ^ nr;
              add += char1;

              nr  ^= (((nr & 63) + add) * (unsigned long)char2) + (nr << 8);
              nr2 += (nr2 << 8) ^ nr;
              add += char2;

              nr  ^= (((nr & 63) + add) * (unsigned long)char3) + (nr << 8);
              nr2 += (nr2 << 8) ^ nr;
              add += char3;

              nr  ^= (((nr & 63) + add) * (unsigned long)char4) + (nr << 8);
              nr2 += (nr2 << 8) ^ nr;
              add += char4;

              if (search_extension(nr, nr2, add)) return;
  }
}

void search8_new() {
  unsigned long nr = 1345345333L, add = 7, nr2 = 0x12345671L;

  for (char1 = 33; char1 < 127; char1++)
    for (char2 = 33; char2 < 127; char2++)
        for (char3 = 33; char3 < 127; char3++)
          for (char4 = 33; char4 < 127; char4++)
              for (char5 = 33; char5 < 127; char5++) {
                nr  = 1345345333L;
                add = 7;
                nr2 = 0x12345671L;

                nr  ^= (((nr & 63) + add) * (unsigned long)char1) + (nr << 8);
                nr2 += (nr2 << 8) ^ nr;
                add += char1;

                nr  ^= (((nr & 63) + add) * (unsigned long)char2) + (nr << 8);
                nr2 += (nr2 << 8) ^ nr;
                add += char2;

                nr  ^= (((nr & 63) + add) * (unsigned long)char3) + (nr << 8);
                nr2 += (nr2 << 8) ^ nr;
                add += char3;
 
                nr  ^= (((nr & 63) + add) * (unsigned long)char4) + (nr << 8);
                nr2 += (nr2 << 8) ^ nr;
                add += char4;

                nr  ^= (((nr & 63) + add) * (unsigned long)char5) + (nr << 8);
                nr2 += (nr2 << 8) ^ nr;
                add += char5;

                if (search_extension(nr, nr2, add)) return;
  }
}


void search9_new() {
  unsigned long nr = 1345345333L, add = 7, nr2 = 0x12345671L;

  for (char1 = 33; char1 < 127; char1++)
    for (char2 = 33; char2 < 127; char2++)
        for (char3 = 33; char3 < 127; char3++)
          for (char4 = 33; char4 < 127; char4++)
              for (char5 = 33; char5 < 127; char5++)
                for (char6 = 33; char6 < 127; char6++) {
                    nr  = 1345345333L;
                    add = 7;
                    nr2 = 0x12345671L;

                    nr  ^= (((nr & 63) + add) * (unsigned long)char1) + (nr << 8);
                    nr2 += (nr2 << 8) ^ nr;
                    add += char1;

                    nr  ^= (((nr & 63) + add) * (unsigned long)char2) + (nr << 8);
                    nr2 += (nr2 << 8) ^ nr;
                    add += char2;
 
                    nr  ^= (((nr & 63) + add) * (unsigned long)char3) + (nr << 8);
                    nr2 += (nr2 << 8) ^ nr;
                    add += char3; 

                    nr  ^= (((nr & 63) + add) * (unsigned long)char4) + (nr << 8);
                    nr2 += (nr2 << 8) ^ nr;
                    add += char4;

                    nr  ^= (((nr & 63) + add) * (unsigned long)char5) + (nr << 8);
                    nr2 += (nr2 << 8) ^ nr;
                    add += char5;

                    nr  ^= (((nr & 63) + add) * (unsigned long)char6) + (nr << 8);
                    nr2 += (nr2 << 8) ^ nr;
                    add += char6;

                    if (search_extension(nr, nr2, add)) return;
  }
}

int search_extension(unsigned long nrd, unsigned long nr2d, unsigned long add1d) {
  unsigned long nre, nrf, nrg;
  unsigned long nr2e, nr2f, nr2g;
  unsigned long add1e, add1f, add1g;
  unsigned long constant1e, constant3e, variable1e;
  unsigned long constant1f, constant3f, variable1f;
  unsigned long constant1g, constant3g, variable1g;
  unsigned long nrdisc1, nrdisc2, nr2disc1, nr2disc2;
  unsigned long nr12;
  unsigned long delta1, delta2, delta3, delta4;
  unsigned long dividende1 , dividende2;

  constant1e = (nrd & 63) + add1d;
  constant3e = nr2d << 8;
  variable1e = (constant1e << 5) + (nrd << 8);

  nrdisc1  = nrd xor variable1e;
  nrdisc2  = nrdisc1 + 0x100000;
  nr2disc1 = nr2d + (constant3e xor nrdisc1);
  nr2disc2 = nr2d + (constant3e xor nrdisc2);
  nr12   = nrdisc1 << 8;

  delta1 = nrdisc1 xor (nr2disc1 << 8);
  delta2 = ((delta1 xor (nr12 + 0x10000000)) + nr2disc1) & 0x70000000;
  delta1 = ((delta1 xor nr12) + nr2disc1) & 0x70000000;
                   
  nr12   = nrdisc2 << 8;
  delta3 = nrdisc2 xor (nr2disc2 << 8);
  delta4 = ((delta3 xor (nr12 + 0x10000000)) + nr2disc2) & 0x70000000;
  delta3 = ((delta3 xor nr12) + nr2disc2) & 0x70000000;

  if (delta1 == nr2_g3 || delta2 == nr2_g3 || delta3 == nr2_g3 || delta4 == nr2_g3 ||
      delta1 == nr2_g3plus || delta2 == nr2_g3plus || delta3 == nr2_g3plus || 
      delta4 == nr2_g3plus)

    for (extension_char1 = 33; extension_char1 <= 126; extension_char1++) {
      variable1e = variable1e + constant1e;
      nre = nrd xor variable1e;
      nr2e = nr2d + (constant3e xor nre);

      nr12   = nre << 8;
      delta1 = nre xor (nr2e << 8);
      delta2 = ((delta1 xor (nr12 + 0x100000)) + nr2e) & 0x7FF00000;
      delta1 = ((delta1 xor nr12) + nr2e) & 0x7FF00000;

      if (delta1 == nr2_g2_expected1_genuine || delta1==nr2_g2_expected2_genuine ||
          delta2 == nr2_g2_expected1_genuine || delta2==nr2_g2_expected2_genuine ) {

      add1e = add1d + extension_char1;

      constant1f = (nre & 63) + add1e;
      constant3f = nr2e << 8;
      variable1f = (constant1f << 5 ) + (nre << 8);

      for (extension_char2 = 33; extension_char2 <= 126; extension_char2++) {
        variable1f = variable1f + constant1f;
        nrf = nre xor variable1f;
        nr2f = nr2e + (constant3f xor nrf);            

        if ((nr2f & 0x7FFFFFFF) == nr2_expected) {
          add1f      = add1e + extension_char2;
          constant1g = (nrf & 63) + add1f;
          constant3g = nr2f << 8;
          variable1g = (constant1g << 5 ) + (nrf << 8);

          for (extension_char3 = 33; extension_char3 <= 126; extension_char3++) {
            variable1g = variable1g + constant1g;
            nrg = nrf xor variable1g;
            nr2g = nr2f + (constant3g xor nrg);

            if ((nrg & 0x7FFFFFFF) == footprint1 && (nr2g & 0x7FFFFFFF) == footprint2) {
              found_footprint();
              return(1);
            }
          }
        }
      }
    }
  }

  return(0);
}

Aktueller Hinweis vom 03.06.2017:

Es ist zum Kotzen, dass man hier seine eigene Arbeit präsentiert und diese dann rotzfrech z.Bsp. zu Stackoverflow kopiert wird. Urheberrecht (Copyright) scheint für viele ein Fremdwort zu sein.

An alle Kopierer: Wundert ihr Euch wirklich, dass gute Entwickler mehr und mehr ihren Source Code verschlüsseln und immer weniger helfen !?

Wenn meine Ausdruckweise den einen oder anderen stört, dann ist das schade – würden sich mehr Nutzer für den Schutz des geistigen Eigentums stark machen, dann müsste ich mich nicht so häufig ärgern. Die Folge ist, dass ich irgendwann solche Seiten mit kostenfreier Hilfe und Tips einfach schließe, denn auf Ärger “für nothing” habe ich einfach keine Lust.

21. Dez 2008
Teaser

Entwicklungsumgebung mit cakePHP, mySQL & Eclipse

Benötigte Software (in Klammern die für diese Anleitung genutzte Version)

  • XAMPP (1.6.8 – Win32, Basic Package)
  • cakePHP (1.2.0.7945-rc4, Zip Archiv)
  • Eclipse (3.4.1 Classic (Ganymede) – Windows, Zip Archiv)

Installation(en)

Sofern ich keine Angabe zu einem Bildschirm oder Schritt einer Software-Installation gemacht habe, übernehmen Sie einfach die vorgegebenen / angezeigten Einstellungen.

  • XAMPP
    • Starten Sie die “xampp-win32-1.6.8-installer.exe”
    • Zielverzeichnis: “C:\xampp” (Standard)
    • Am Ende wird angeboten, das Control Panel zu starten.
      Wählen Sie “Ja” – Starten Sie jedoch noch kein Modul
  • cakePHP
    • Legen Sie im Verzeichnis “C:\xampp” einen neuen Unterordner “www” an
    • Entpacken Sie das Archiv “cake_1.2.0.7945-rc4.zip” im neuen Order “www”
    • Benennen Sie den erstellten Ordner um in “cakePHP”
      Sie haben jetzt ein Verzeichnis “c:\xampp\cakePHP”.
      In diesem finden Sie vier Ordner und u.a. die “index.php”
    • Gehen Sie in das Verzeichnis “C:\xampp\www\cakePHP\app\config”
    • Öffnen Sie die Datei “core.php”
    • Suchen Sie die folgende Zeile und ändern Sie den zweiten Parameter (“DYhG93..”) in eine andere willkürliche & zufällige Zeichenkette ab:
      Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');
    • Speichern Sie die Datei und schließen Sie den Editor
    • Im gleichen Verzeichnis finden Sie die Datei “database.php.default”
    • Kopieren Sie die Datei in “database.php” und öffnen Sie sie mit einem Editor
    • Am Ende der Datei tragen Sie die Zugangsdaten für Ihren mySQL Server (s.u.) ein:
      var $default = array(
      'driver' => 'mysql',
      'persistent' => false,
      'host' => 'localhost',
      'login' => 'root',
      'password' => 'masterpwd',
      'database' => 'cakePHP',
      'prefix' => '',
      );

      Sicherheitshinweis:
      Bitte nutzen Sie andere Passwörter. Ich verwende in meinem Beispiel stets “masterpwd” – ersetzen Sie es durch ein sicheres Passwort. Außerdem nutze ich in diesem Beispiel den Datenbankuser “root”. Wenn Ihre Entwicklungsumgebung nicht sicher oder geschützt ist, nutzen Sie bitte einen anderen Datenbankuser. Die Einrichtung und Einstellungen sind nicht Teil dieser Anleitung.

  • Virtuellen Server unter Apache (XAMPP) konfigurieren
    • Gehen Sie in das Verzeichnis “C:\xampp\apache\conf\extra”
    • Öffnen Sie die Datei “httpd-vhosts.conf” mit einem Texteditor
    • Entfernen Sie am Anfang der Datei die Kommentarzeichen (#) vor dieser Zeile:
      NameVirtualHost *:80
    • Fügen Sie am Ende der Textdatei die folgenden Zeilen hinzu:
      <VirtualHost *:80>
        ServerAdmin webmaster@local
        DocumentRoot c:/xampp/htdocs
        ServerName localhost
        ErrorLog C:/xampp/apache/logs/error.log
        CustomLog C:/xampp/apache/logs/access.log common
      </VirtualHost>
      
      <VirtualHost *:80>
        ServerAdmin webmaster@cakePHP.local
        DocumentRoot c:/xampp/www/cakePHP/app/webroot
        <Directory c:/xampp/www/cakePHP/app/webroot>
          Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
          DirectoryIndex index.php index.shtml index.html index.htm
          Order allow,deny
          Allow from all
        </Directory>
        ServerName cakePHP
        ErrorLog C:/xampp/apache/logs/cakePHP-error.log
        CustomLog C:/xampp/apache/logs/cakePHP-access.log common
      </VirtualHost>
    • Speichern Sie die Datei und schließen Sie den Editor
    • Gehen Sie in das Verzeichnis “C:\windows\system32\drivers\etc”
    • Öffnen Sie die Datei “hosts” mit einem Texteditor
    • Fügen Sie am Ende der Datei folgende Zeile hinzu:
      127.0.0.1    cakePHP 
    • Speichern Sie die Datei und schließen Sie den Editor
  • Apache (WebServer) starten
    • In der unteren rechten Bildschirmecke finden Sie neben der Uhr ein oranges “X” Symbol.
      Klicken Sie es einmal mit der linken Maustaste an. Das XAMPP Control Panel öffnet sich.
    • Klicken Sie hinter “Apache” auf den “Start” Button
      Nach wenigen Sekunden wird vor dem Button der grüne Text “Running” erscheinen.
      Gut gemacht: Ihr WebServer läuft !
  • mySQL & phpMyAdmin konfigurieren (Datenbank & -administration)
    • Klicken SIe auf “Start” hinter “MySQL”
    • Nach wenigen Sekunden wird vor dem Button der grüne Text “Running” erscheinen
    • Ändern Sie das Masterpasswort Ihres mySQL Servers:
      Dafür führen Sie folgenden Befehl aus (drücken Sie dafür die Windowstaste + “R” zusammen):

      c:\xampp\mysql\bin\mysqladmin --user=root --password= password masterpwd

      Wählen Sie bitte ein anderes (sichers) Passwort und ersetzen Sie “masterpwd” an Ende der Zeile durch Ihr Passwort.

    • Gehen Sie in das Verzeichnis “C:\xampp\phpMyAdmin” und öffnen Sie die Datei “config.inc.php”
    • Tragen Sie Ihr Passwort in die folgende Zeile ein (die Hochkommata sind wichtig):
      $cfg['Servers'][$i]['password'] = 'masterpwd';
    • Speichern Sie die Datei und schließen Sie den Editor
    • Starten Sie Ihren Browser (z.Bsp. Mozilla Firefox) und öffnen Sie folgende Seite:
      http://localhost/phpmyadmin/
    • Wieder gut gemacht: Ihr Datenbankserver läuft !
    • Legen Sie eine neue Datenbank an:
      In der mittleren Spalte geben Sie unter “Neue Datenbank anlegen” den Namen “cakePHP” in das Textfeld ein und klicken auf “anlegen”
  • cakePHP testen
    • Öffnen Sie in Ihrem Browser die URL “http://cakePHP
    • Ihnen wird die Standardseite von cakePHP angezeigt.
      Dabei zeigen Ihnen die vier grünen Bereiche die notwendigen (und erfüllten) Voraussetzungen an.

Ihre cakePHP Installation ist jetzt vollständig einsetzbar. Die Installation und Konfiguration von Eclipse bringt Ihnen jedoch einen vielseitigen und optimalen Editor für Ihre neuen (php) Webseiten. Die Codevervollständigung, PHP Syntaxprüfung und weitere Features unterstützen Sie bei der Entwicklung Ihrer Internetseiten.

Bei dieser Anleitung habe ich die Eclipse Classic Version gewählt. Je nach Wunsch können Sie aber auch andere (auf der Eclipse Download Seite angezeigte) Versionen nutzen.


  • Eclipse installieren (optional)
    • Entpacken Sie das Archiv “eclipse-SDK-3.4.1-win32.zip”.
      In dem erhaltenen Verzeichnis “eclipse-SDK-3.4.1-win32” finden Sie den Ordner “eclipse”.
    • Kopieren Sie diesen “eclipse” Ordner in das Verzeichnis “C:\xampp” hinein.
      Sie haben jetzt ein Verzeichnis “C:\xampp\eclipse”.
    • Dort finden Sie die Anwendung “eclipse.exe”, die Sie bitte starten
    • Sie werden nach Ihrem gewünschten “Workspace” gefragt:
      Wählen Sie als Verzeichnis bitte “C:\xampp\www”
    • Beim ersten Start von Eclipse wird Ihnen die Startseite angezeigt.
      Dort klicken Sie auf das rechte Symbol (“Workbench”).
      Sie sehen jetzt den Arbeitsbereich Ihrer Eclipse Installation

Eclipse ist jetzt bereits voll einsetzbar. Damit Ihnen die Arbeit mit PHP aber leichter fällt und alle gewünschten Zusatzfunktionen zur Verfügung stehen, muss die PHP Erweiterung installiert werden:

  • Eclipse: PHP Erweiterung (Plugin) installieren
    • Klicken Sie in Eclipse auf den Menüpunkt “Help” und dann auf “Software Updates …”
    • Wählen Sie den Reiter “Available Software” aus
    • Klicken Sie dort auf den Button “Add Site” und geben Sie die folgende URL ein:
      http://update.phpeclipse.net/update/stable/1.2.x
    • Die neuen Quellen werden in der Softwareliste angezeigt
    • Aktivieren Sie die beiden Einträge
      http://phpeclipse.sourceforge.net/ […] und
      http://update.phpeclipse.net/ […]
    • Klicken Sie auf “Install”
    • In der Übersicht klicken Sie auf “Next”
    • Lesen Sie die Lizenzbedinungen, stimmen Sie zu und klicken Sie auf “Finish”
      Die aktuellen Updates für Eclipse und das PHP Plugin werden jetzt installiert
    • Am Ende der Installation wird Ihnen der Neustart von Eclipse angeboten.
      Stimmen Sie zu

Alle Programme und Erweiterungen sind nun fertig installiert. Sie können mit der Arbeit an Ihren Webseiten beginnen:

  • Ihr cakePHP Projekt (s.o.) in Eclipse öffnen
    • Wählen Sie in Eclipse den Menüpunkt “Window”, dann “Open Perspective” und jetzt “Other”
    • Klicken Sie doppelt auf den Listeneintrag “PHP”.
      Ihre Arbeitsfläche hat sich nun an PHP angepasst
    • Im linken Bereich (“Navigator”) drücken Sie die rechte Maustaste, wählen “New” und “PHP Projekt”
    • Als Projektnamen geben Sie “cakePHP” ein und klicken auf “Finish”
    • Ihnen wird ein neuer Eintrag im Navigator angezeigt: Ihre cakePHP Installation

Fertig.

14. Sep 2008
Teaser

xtCommerce Download

Die Software “xtCommerce” wird unter der Lizenz “GNU GPL” veröffentlicht. Das meint, kurz gesagt, dass diese Software von jedem frei verfügbar genutzt und weitergegeben werden kann. Jedoch erweist es sich derzeit als recht schwer, diese Software zu erhalten.

Update

Aufgrund der inzwischen veralteten Version des Downloads (V3.04 SP2.1) möchten wir Ihnen diese Version nicht mehr als einfachen Download anbieten. Diese Version wird nicht mehr den aktuellen Sicherheitsanforderungen im Internet Rechnung tragen. Auf E-Mailanfrage erhalten Sie von uns jedoch weiterhin ein Archiv (.zip oder .tar.gz) zugeschickt. Bitte geben Sie das gewünschte Archiv-Format in Ihrer E-Mail an: info@yourhelpcenter.de

30. Aug 2008
Teaser

Datenschutz durch Verschlüsselung

Wenn Sie vertrauliche Daten sehr sicher schützen möchten, dann bleiben Ihnen nicht viele Alternativen zur Dauerkontrolle und Überwachung dieser Daten bzw. der Datenträger.

Eine der Alternativen ist eine Verschlüsselung durch eine Software ohne Backdoors (Hintertüren) durch die Hersteller und Programmierer. Diese grundlegende Zusage geben Ihnen zwar die meisten Anbieter von Sicherheitssoftware – fast keiner aber schriftlich (z. Bsp. die Hersteller von CompuSec verweigern jede Garantie und schriftliche Zusage).

Ein sicherer Weg zur Kontrolle ist Open-Source (Offenliegender Programmquellcode). Dabei geben Ihnen die Anbieter der Software vollständigen Einblick in den Quellcode Ihres Programmes. Das nutzen viele andere Programmierer (auch wir) um uns solche Angebote anzusehen und auf Schwachstellen zu testen. Die erste Prüfung geht dabei auf die Existenz von Backdoors und fest eingebauten Passwörtern.

Eine Alternative für eine sehr sichere Verschlüsselung ist TrueCrypt.

Bei dieser Software werden die Daten in verschlüssten “Containern” abgelegt. Die Methode der vollverschlüsselten Datenträger (Volumes) bei TrueCrypt können wir nicht empfehlen. Aus unserer Erfahrung neigen Benutzer im Eifer der Arbeit dazu, diese direkt in Windows einzubinden … und erlauben Windows dann die Formatierung des als unformatiert erkannten Datenträgers. Werden diese Platten über die Software eingebunden, sind sie ebenfalls sehr sicher – das Risiko ist jedoch für unerfahrene benutzer nicht zu unterschätzen!

Als Neuerung kann TrueCrypt jetzt auch die Boot-Festplatte verschlüsseln und dadurch eine PreBoot-Authentifizierung (= vor dem Start des Betriebssystemes) erzwingen. Das erhöht die Sicherheit Ihrer Daten und Computer noch einmal stark. Im Gegensatz zur o.a. kommerziellen Version (ohne SourceCode-Einsicht) haben Sie hier auch wieder die Kontrolle durch andere Entwickler.

Zum Notieren:
TrueCrypt – Kostenlose Software zum sicheren Verschlüsseln von Festplatten & Daten