<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://bafbal.de/index.php?action=history&amp;feed=atom&amp;title=BC_Tools</id>
	<title>BC Tools - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="http://bafbal.de/index.php?action=history&amp;feed=atom&amp;title=BC_Tools"/>
	<link rel="alternate" type="text/html" href="http://bafbal.de/index.php?title=BC_Tools&amp;action=history"/>
	<updated>2026-05-06T07:07:12Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in bafbal.de</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://bafbal.de/index.php?title=BC_Tools&amp;diff=623&amp;oldid=prev</id>
		<title>Michaelebner: Die Seite wurde neu angelegt: „=Tools=  Auf der Registerseite ''Tools''  sind ein paar unterstützende Funktionen untergebracht.  Tools  * ''Hash'' erzeugt…“</title>
		<link rel="alternate" type="text/html" href="http://bafbal.de/index.php?title=BC_Tools&amp;diff=623&amp;oldid=prev"/>
		<updated>2021-06-12T16:49:41Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „=Tools=  Auf der Registerseite &amp;#039;&amp;#039;Tools&amp;#039;&amp;#039;  sind ein paar unterstützende Funktionen untergebracht.  &lt;a href=&quot;/index.php?title=Datei:Ssht_code_tools.png&quot; title=&quot;Datei:Ssht code tools.png&quot;&gt;977px|Tools&lt;/a&gt;  * &amp;#039;&amp;#039;Hash&amp;#039;&amp;#039; erzeugt…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Tools=&lt;br /&gt;
&lt;br /&gt;
Auf der Registerseite ''Tools''  sind ein paar unterstützende Funktionen untergebracht.&lt;br /&gt;
&lt;br /&gt;
[[file:Ssht code tools.png|977px|Tools]]&lt;br /&gt;
&lt;br /&gt;
* ''Hash'' erzeugt zu einem eingegebenen Wert den Hash, der Algorithmus lässt sich auswählen&lt;br /&gt;
* ''DB Column Convert'' konvertiert Spalteninhalte und ist im Moment der rudimentär entwickelt&lt;br /&gt;
* ''Create GUID'' erzeugt eine GUID&lt;br /&gt;
* ''Excrypt'' verschlüsselt Passwörter, zum Beispiel Datenbankpasswörter für die Ini-Datei.&lt;br /&gt;
&lt;br /&gt;
==Encrypt==&lt;br /&gt;
&lt;br /&gt;
Bei der Verschlüsselung von Passwörter soll für jedes Passwort ein anderer Verschlüsselungswert verwendet werden - dieser kann zwischen 111 und 999 eingestellt werden. Mit ''Go'' wird der eingegebenen Text (hier ''Test'') verschlüsselt und zur Kontrolle auch gleich wieder entschlüsselt.&lt;br /&gt;
&lt;br /&gt;
Die Entschlüsselung von Passwörtern ist aus Sicherheitsgründen bei den Tools nicht vorhanden. Das sollte jedoch nicht darüber hinwegtäuschen, dass jeder, der den Quelltext vorliegen hat, mit dem Debugger den Klartext auslesen kann.&lt;br /&gt;
&lt;br /&gt;
Für etwas mehr Sicherheit sollte man sich seine eigene Unit erstellen, dazu wird auf ''Create Unit to Clipboard'' geklickt und dann ist in der Zwischenablage so etwas wie der folgende Code, wobei die texte für s zufällig generiert werden.&lt;br /&gt;
&lt;br /&gt;
    111: s := 'VGksIy0Jwogdw6rCqsOQMQ3CscObw5jDq20zZCwJw61DwrHCg8K2HQE6';&lt;br /&gt;
    112: s := 'w4fCl8KYw6DDgsKDwq3DkcKuw4VTLcKRURIyasOmR8KkfH3DvF0owpDDvDvDocKn';&lt;br /&gt;
    113: s := 'VwjDnsOjwpwkwplZd8O8Tn/Cg8Kaw7gYcMOVwow0w57DvmFLfcO+GsKPW0U=';&lt;br /&gt;
    114: s := 'a8OldQzCmDTDp8K2wpPDrlliw7sIwoLDtcKAw43DpSdaKBhlw5hvO8KLSMK1';&lt;br /&gt;
    ...&lt;br /&gt;
    998: s := 'wptcTgbCtsOBacKcw49XFw3Dn8O5QMOiVHHDjzcNVsKkw5sSwpkUTcOLfA==';&lt;br /&gt;
    999: s := 'X3PCpsORwq4Dd8K+fgACXsKJw4Zvw7vClHrCpsOJwrnDp8OLRgcPXcK1wpUN';&lt;br /&gt;
&lt;br /&gt;
Der generierte wird in die Unit uBafCrypt, dort in die Funktion BafGetXorString eingefügt.&lt;br /&gt;
&lt;br /&gt;
 unit uBafCrypt;&lt;br /&gt;
 &lt;br /&gt;
 interface &lt;br /&gt;
 &lt;br /&gt;
 uses System.NetEncoding, Classes, SysUtils;&lt;br /&gt;
 &lt;br /&gt;
   function BafEncrypt(ANum: integer; AText: string): string;&lt;br /&gt;
   function BafDecrypt(AText: string): string;&lt;br /&gt;
   function BafGetXorString(ANum: integer): string;&lt;br /&gt;
   function BafGetXorValues: string;&lt;br /&gt;
 &lt;br /&gt;
 implementation&lt;br /&gt;
 &lt;br /&gt;
 function BafEncrypt(ANum: integer; AText: string): string;&lt;br /&gt;
 var&lt;br /&gt;
   s, t: string;&lt;br /&gt;
   i, j: integer;&lt;br /&gt;
 begin&lt;br /&gt;
   s := BafGetXorString(ANum);&lt;br /&gt;
   for i := 1 to Length(AText) do begin&lt;br /&gt;
     j := 1 + ((i - 1) mod (30));&lt;br /&gt;
     t := t + chr(Ord(AText[i]) xor Ord(s[j]));&lt;br /&gt;
   end;&lt;br /&gt;
   result := IntToStr(ANum) + TNetEncoding.Base64.Encode(t);&lt;br /&gt;
 end;&lt;br /&gt;
 &lt;br /&gt;
 function BafDecrypt(AText: string): string;&lt;br /&gt;
 var&lt;br /&gt;
   s, t: string;&lt;br /&gt;
   i, j, LNum: integer;&lt;br /&gt;
 begin&lt;br /&gt;
   if Length(AText) &amp;lt; 7 then&lt;br /&gt;
     exit;&lt;br /&gt;
   t := copy(AText, 1, 3);&lt;br /&gt;
   LNum := StrToInt(t);&lt;br /&gt;
   s := BafGetXorString(LNum);&lt;br /&gt;
   t := TNetEncoding.Base64.Decode(copy(AText, 4, MaxInt));&lt;br /&gt;
   for i := 1 to Length(t) do begin&lt;br /&gt;
     j := 1 + ((i - 1) mod (30));&lt;br /&gt;
     result := result + chr(Ord(t[i]) xor Ord(s[j]));&lt;br /&gt;
   end;&lt;br /&gt;
 end;&lt;br /&gt;
 &lt;br /&gt;
 function BafGetXorString(ANum: integer): string;&lt;br /&gt;
 var&lt;br /&gt;
   s: string;&lt;br /&gt;
 begin&lt;br /&gt;
   case ANum of&lt;br /&gt;
     111: s := 'w65hw4nDvsObwpEmCsOVwqHDrzDDvi7DhCHChGjCqArCkmYSEMK1w43CowVeKQ==';&lt;br /&gt;
     112: s := 'R13CgsKQw5/CiGNrwqlEE8KMBcKWOcOcVWYiRg4HN8K/Qw5MfjJW';&lt;br /&gt;
     113: s := 'cMOGwqgGMsOaN8O8eMO/wqTDuGrCm8O+WQDDmj5hQmluND8xwrEbUCQ=';&lt;br /&gt;
     114: s := 'wqfDgSxwC2bDlcORwohBwoTCuxrClcOuwpDChCzCqzXCqD3ClMKiw4nDrU5LC8O3';&lt;br /&gt;
     ...&lt;br /&gt;
     996: s := 'wp0ZFBRiGRNTwrbDmCzDr3sbwrbCrcOWw6gRfWPCuMKaw5JmwrTCtcKdFio=';&lt;br /&gt;
     997: s := 'LcK4LcOLPMOvc14Hw63Dq8OsW8OBw4HCmMOww4JIwq/CiwHCgsKYwrrCjhLCtQtI';&lt;br /&gt;
     998: s := 'wppbw6zDusOKcMKuw7HDhGI6Y8KBccKEP1vCkMOPSQVQQsKWasKWZcOOYBs=';&lt;br /&gt;
     999: s := 'worDgxXDqzNGwqVfw7xQTVvCocOXDsK4FcOxw5Ykw5QmZ8Ozw6DDt8KdwpoJGQ==';&lt;br /&gt;
   else&lt;br /&gt;
     raise Exception.Create('Num out of range');&lt;br /&gt;
   end;&lt;br /&gt;
   result := TNetEncoding.Base64.Decode(s);&lt;br /&gt;
 end;&lt;br /&gt;
 &lt;br /&gt;
 function BafGetXorValues: string;&lt;br /&gt;
 var&lt;br /&gt;
   LNum, i: integer;&lt;br /&gt;
   sl: TStringList;&lt;br /&gt;
   s: string;&lt;br /&gt;
 begin&lt;br /&gt;
   Randomize;&lt;br /&gt;
   sl := TStringList.Create;&lt;br /&gt;
   try&lt;br /&gt;
     for LNum := 111 to 999 do begin&lt;br /&gt;
       s := '';&lt;br /&gt;
       for i := 1 to 30 do&lt;br /&gt;
         s := s + Chr(Random(256));&lt;br /&gt;
       sl.Add('    ' + IntToStr(LNum) + ': s := '&lt;br /&gt;
           + QuotedStr(TNetEncoding.Base64.Encode(s)) + ';');&lt;br /&gt;
     end;&lt;br /&gt;
     result := sl.Text;&lt;br /&gt;
   finally&lt;br /&gt;
     sl.Free;&lt;br /&gt;
   end;&lt;br /&gt;
 end;&lt;br /&gt;
  &lt;br /&gt;
 end.&lt;br /&gt;
&lt;br /&gt;
Wir haben hier eine klassische XOR-Verschlüsselung mit einem Schlüssel, der länger als das Passwort sein sollte. Von der Seite ist das Verfahren mathematisch beweisbar sicher (sofern jeder Verschlüsselungswert zwischen 111 und 999 nur einmal verwendet wird). Gegen Angriffe, die Zugriff auf den Code haben und den Klartext im Debugger auslesen können, hilft das selbstverständlich nichts.&lt;/div&gt;</summary>
		<author><name>Michaelebner</name></author>
		
	</entry>
</feed>