TommyFilhiger: Wer kann mir eine VB-Funktion in PHP "übersetzen" ?

Hey Profis!
Das Verschlüsseln und Entschlüsseln auf VB-Seite krieg ich hin - das Verschlüsselte soll nun aber auf einer PHP-Seite entschlüsselt werden.

Wäre wirklich super - ich kriegs einfach nicht hin...
Per Mail wär' nett - Danke im Voraus!

Public Function Entschluesseln(ByVal Wert As String) As String
     Dim base64 As String
         base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
     Dim key As String
         key = "wsxnAoedc1jief6xQit1nbhu6Jcpo1bvfq5dhgt0novB1rtlA" & _
                 "hjSalkgXiv2ater7ecsn2mlkd7Piez3ypkj8hacd3fghj2eiu" & _
                 "ndmfsdjtppl3hghj8sgfh3lglg8srtm6lokj1awsd6efMv3xb" & _
                 "nzgfnCkij4rm4lodp9kjud4egdn9Nplk9nhgr4tzgh9raid4s" & _
                 "loVpsjsix5ejf5gdmx0apFe5funb0irYm2fsdl7wzwe0hsTn5" & _
                 "qaA7lp"
     Dim decode As String
     Dim CodeZeile As String
     Dim Codiert As String
     Dim A As Integer
     Dim B As Integer
     Dim C As Integer
     Dim D As Integer
     Dim s As Integer
     Dim Erg As Integer
         If Len(Wert) > 32000 Then
             Entschluesseln = ""
             Exit Function
         End If

While Len(Wert) > Len(key)
             DoEvents
             key = key & key
         Wend

' Base64
         decode = ""
         CodeZeile = Wert
         For s = 1 To Len(CodeZeile) Step 4
             DoEvents
             A = InStr(base64, (Mid(CodeZeile, s + 0, 1))) - 1
             B = InStr(base64, (Mid(CodeZeile, s + 1, 1))) - 1
             C = InStr(base64, (Mid(CodeZeile, s + 2, 1))) - 1
             D = InStr(base64, (Mid(CodeZeile, s + 3, 1))) - 1
             If B >= 0 Then decode = decode & Chr((A * 4 + Int(B / 16)) And 255)
             If C >= 0 Then decode = decode & Chr((B * 16 + Int(C / 4)) And 255)
             If D >= 0 Then decode = decode & Chr((C * 64 + D) And 255)
         Next s

' Key zurück
         Codiert = ""
         For s = 1 To Len(decode)
             DoEvents
             Erg = Asc(Mid(decode, s, 1)) Xor Asc(Mid(myKey, s, 1))
             Codiert = Codiert & Chr(Erg)
         Next s

Entschluesseln = Codiert
End Function

  1. Hallo TommyFilhiger,

    Meine VB-Kenntnisse sind sehr bescheiden, aber vielleicht hilft dir ja das hier

    Gruß,

    Dieter

    1. Danke, aber soweit war ich natürlich auch schon.

      Das kuriose aber ist, dass die Base64 Ver- und Entschlüsselung in der VB-Funktion anders zu arbeiten scheint, als die base64_decode/encode.

      Deshalb wollte ich die komplette Funktion nach PHP umbauen (und verzweifle)...

      Gruss
      Tom

      Hallo TommyFilhiger,

      Meine VB-Kenntnisse sind sehr bescheiden, aber vielleicht hilft dir ja das hier

      Gruß,

      Dieter

  2. Hallo,

    Erg = Asc(Mid(decode, s, 1)) Xor Asc(Mid(myKey, s, 1))

    woher kommt die Variable myKey? Wo genau liegt dein Problem beim Umschreiben des Codes?

    Schöne Grüße
    Julian

    --
    "Hex is for sissies. Real men use binary. And the most hardcore types use only z
    eros - uppercase zeros and lowercase zeros." - Tomasz Sowinski
  3. Public Function Entschluesseln(ByVal Wert As String) As String

    function Entschluesseln{
     $Wert = (string) "";

    Dim base64 As String
             base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    $base64 = (string) "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    Dim key As String
             key = "wsxnAoedc1jief6xQit1nbhu6Jcpo1bvfq5dhgt0novB1rtlA" & _
                     "hjSalkgXiv2ater7ecsn2mlkd7Piez3ypkj8hacd3fghj2eiu" & _
                     "ndmfsdjtppl3hghj8sgfh3lglg8srtm6lokj1awsd6efMv3xb" & _
                     "nzgfnCkij4rm4lodp9kjud4egdn9Nplk9nhgr4tzgh9raid4s" & _
                     "loVpsjsix5ejf5gdmx0apFe5funb0irYm2fsdl7wzwe0hsTn5" & _
                     "qaA7lp"

    $key[1]="hjSalkgXiv2ater7ecsn2mlkd7Piez3ypkj8hacd3fghj2eiu";
    $key[2]="ndmfsdjtppl3hghj8sgfh3lglg8srtm6lokj1awsd6efMv3xb";
    $key[3]="nzgfnCkij4rm4lodp9kjud4egdn9Nplk9nhgr4tzgh9raid4s";
    $key[4]="loVpsjsix5ejf5gdmx0apFe5funb0irYm2fsdl7wzwe0hsTn5";

    Dim decode As String
         Dim CodeZeile As String
         Dim Codiert As String
         Dim A As Integer
         Dim B As Integer
         Dim C As Integer
         Dim D As Integer
         Dim s As Integer
         Dim Erg As Integer

    $decode=(string)"";
    $CodeZeile=(string)"";
    $codiert=(string)"";
    $A=(integer)"";
    $B=(integer)"";
    $C=(integer)"";
    $D=(integer)"";
    $s=(integer)"";
    $Erg=(integer)"";

    If Len(Wert) > 32000 Then
                 Entschluesseln = ""
                 Exit Function
             End If

    if(strlen($wert)>3200){
     $Entschlüsseln="";
     exit; //exit aber nur, wenn das Script wirklich NUR aus der Funktion besteht
    }

    While Len(Wert) > Len(key)
                 DoEvents
                 key = key & key
             Wend

    while(strlen($Wert)>strlen($key)){
     $key=$key.$key;
    }

    ' Base64
             decode = ""
             CodeZeile = Wert

    $CodeZeile=$Wert;

    For s = 1 To Len(CodeZeile) Step 4
                 DoEvents
                 A = InStr(base64, (Mid(CodeZeile, s + 0, 1))) - 1
                 B = InStr(base64, (Mid(CodeZeile, s + 1, 1))) - 1
                 C = InStr(base64, (Mid(CodeZeile, s + 2, 1))) - 1
                 D = InStr(base64, (Mid(CodeZeile, s + 3, 1))) - 1

    for($s=1;s>strlen($CodeZeile);s+4){
     // Ist dies hier wichtig oder kann man das auch anders lösen?
     // Etwas vergleichbares wie die InStr-Funktion gibt es in PHP nicht

    If B >= 0 Then decode = decode & Chr((A * 4 + Int(B / 16)) And 255)
    If C >= 0 Then decode = decode & Chr((B * 16 + Int(C / 4)) And 255)
    If D >= 0 Then decode = decode & Chr((C * 64 + D) And 255)
    Next s

    if($B>=0){
     $decode=$decode.chr(($A*4)+($B/16)).chr(255);
    }

    if($C>=0){
     $decode=$decode.chr(($B*16)+($C/4)).chr(255);
    }

    if($D>=0){
     $decode=$decode.chr(($C*64)+$D).chr(255);
    }

    }

    ' Key zurück
             Codiert = ""
             For s = 1 To Len(decode)
                 DoEvents
                 Erg = Asc(Mid(decode, s, 1)) Xor Asc(Mid(myKey, s, 1))
                 Codiert = Codiert & Chr(Erg)
             Next s

    $Codiert="";

    for($s=1;strlen($decode);s++){
     $Erg = chr(substr(substr($decode,$s,1),0,1))XOR(chr(substr(substr($mykey,$s,1),0,1)));
    }

    Entschluesseln = Codiert
    End Function

    $Entschlüsseln=$Codiert;

    }

    1. Hallo!

      Public Function Entschluesseln(ByVal Wert As String) As String

      function Entschluesseln{
      $Wert = (string) "";

      $Wert ist ein Parameter, nicht eine leere Variable...
      Es heißt function Entschluesseln($Wert).

      Dim key As String
               key = "wsxnAoedc1jief6xQit1nbhu6Jcpo1bvfq5dhgt0novB1rtlA" & _
                       "hjSalkgXiv2ater7ecsn2mlkd7Piez3ypkj8hacd3fghj2eiu" & _
                       "ndmfsdjtppl3hghj8sgfh3lglg8srtm6lokj1awsd6efMv3xb" & _
                       "nzgfnCkij4rm4lodp9kjud4egdn9Nplk9nhgr4tzgh9raid4s" & _
                       "loVpsjsix5ejf5gdmx0apFe5funb0irYm2fsdl7wzwe0hsTn5" & _
                       "qaA7lp"

      $key[1]="hjSalkgXiv2ater7ecsn2mlkd7Piez3ypkj8hacd3fghj2eiu";
      $key[2]="ndmfsdjtppl3hghj8sgfh3lglg8srtm6lokj1awsd6efMv3xb";
      $key[3]="nzgfnCkij4rm4lodp9kjud4egdn9Nplk9nhgr4tzgh9raid4s";
      $key[4]="loVpsjsix5ejf5gdmx0apFe5funb0irYm2fsdl7wzwe0hsTn5";

      Hmm..? Oben werden die Strings verkettet, nicht in ein Array geschrieben.
      Also $key = "wsxnAoedc1jief6xQit1nbhu6Jcpo1bvfq5dhgt0novB1rtlA".
      "hjSalkgXiv2ater7ecsn2mlkd7Piez3ypkj8hacd3fghj2eiu"...;

      $decode=(string)"";
      $CodeZeile=(string)"";
      $codiert=(string)"";
      $A=(integer)"";
      $B=(integer)"";
      $C=(integer)"";
      $D=(integer)"";
      $s=(integer)"";
      $Erg=(integer)"";

      Schaut ja sehr seltsam aus, auch wenn es wohl funktioniert. Hier fände ich settype() schöner. Das mit dem expliziten Definieren als String ist aber glaube ich unwichtig.

      Entschluesseln = ""
                   Exit Function
      $Entschlüsseln="";
      exit; //exit aber nur, wenn das Script wirklich NUR aus der Funktion besteht

      Bla. Da wäre "return FALSE;" richtiger, denke ich.

      while(strlen($Wert)>strlen($key)){
      $key=$key.$key;

      $key .= $key; ist kürzer.

      A = InStr(base64, (Mid(CodeZeile, s + 0, 1))) - 1
                   B = InStr(base64, (Mid(CodeZeile, s + 1, 1))) - 1
                   C = InStr(base64, (Mid(CodeZeile, s + 2, 1))) - 1
                   D = InStr(base64, (Mid(CodeZeile, s + 3, 1))) - 1

      for($s=1;s>strlen($CodeZeile);s+4){
      // Ist dies hier wichtig oder kann man das auch anders lösen?
      // Etwas vergleichbares wie die InStr-Funktion gibt es in PHP nicht

      strpos hat doch die gleiche Funktion, oder nicht?

      If B >= 0 Then decode = decode & Chr((A * 4 + Int(B / 16)) And 255)
      If C >= 0 Then decode = decode & Chr((B * 16 + Int(C / 4)) And 255)
      If D >= 0 Then decode = decode & Chr((C * 64 + D) And 255)

      if($B>=0){
      $decode=$decode.chr(($A*4)+($B/16)).chr(255);
      }

      if($C>=0){
      $decode=$decode.chr(($B*16)+($C/4)).chr(255);
      }

      if($D>=0){
      $decode=$decode.chr(($C*64)+$D).chr(255);
      }

      In PHP gibt es .=, das sparrt dir viel Wiederholungsarbeit. Außerdem ist das mit deinem Chr etwas vollkommen anderes. Bei dir kommen da zwei Zeichen raus, oben nur eins, weil alles von dem chr() eingeschlossen wurde. Das "And 255" ist vermutlich das gleiche wie "And True", folglich kommt immer 0 oder 1 raus und wird dann in ein Zeichen umgewandelt? Ich bin mir nicht sicher, das Konstrukt ist etwas seltsam.

      Erg = Asc(Mid(decode, s, 1)) Xor Asc(Mid(myKey, s, 1))
      $Erg = chr(substr(substr($decode,$s,1),0,1))XOR(chr(substr(substr($mykey,$s,1),0,1)));

      Wo $myKey herkommt weiß ich jetzt immer noch nicht...

      Entschluesseln = Codiert
      $Entschlüsseln=$Codiert;

      Das musst du mit return $Codiert; lösen.

      Schöne Grüße
      Julian

      --
      "Hex is for sissies. Real men use binary. And the most hardcore types use only z
      eros - uppercase zeros and lowercase zeros." - Tomasz Sowinski