Mitsuhirato: VB-Code in PHP umschreiben

Beitrag lesen

Hallo,

ich bin momentan dran ein älteres VB-Skript in PHP umzuschreiben. Leider bringt es nicht das gewünschte Ergebnis und ich vermute es liegt an den xor Operatoren. Der Quelltext ist nicht so schwer zu lesen, aber irgendwie komme ich nicht zu einer vernünftigen Lösung in PHP. Da ich nicht der geborene Programmieren bin hoffe ich hier Hilfe zu finden.
Wie zu erkennen ist, setzt es verschlüsselte Passwörter in Klartext um und umgekehrt. Benötigen tue ich eigentlich nur den Teil der Entschlüsselung.

Der VBQuelltext:
***************************************************************
************** VB
Function CodierenPasswort(PlainText As String, CipherText As String) As Variant
On Error GoTo Fehler
Dim I As Long, Prev As Integer, Result As String
Dim Char As Integer, KeyIndex As Integer
Dim KeyLen As Integer, TextValue As String
Dim NewChar As Integer, fEncrypting As Integer
ReDim KeyChar(255) As Integer

'//'Magic values' used for en/decryption. Change these
Const MAGIC1 = 123
Const MAGIC2 = 4
Const KeyValue = "Verschlüsseltes Passwort"

'//Determine if we're encrypting or decrypting
If Len(PlainText) Then
    fEncrypting = True
    TextValue = PlainText
Else
    TextValue = CipherText
End If

'//Initialize 'previous character' value, index into
'//key string and length of key
Prev = MAGIC1: KeyIndex = 1
KeyLen = Len(KeyValue)

'//Convert key string to array
For I = 1 To Len(KeyValue)
    KeyChar(I) = Asc(Mid(KeyValue, I, 1))
Next I

'//Actual en/decryption loop
For I = 1 To Len(TextValue)
     Char = Asc(Mid(TextValue, I, 1))
     NewChar = Char Xor KeyChar(KeyIndex) Xor Prev Xor ((I / MAGIC2) Mod 255)
     Result = Result & Chr(NewChar)
     If fEncrypting Then
        Prev = Char
     Else
        Prev = NewChar
     End If
     KeyIndex = KeyIndex + 1
     If KeyIndex > KeyLen Then KeyIndex = 1
Next I

'//Return result to caller
If fEncrypting Then
    CipherText = Result
Else
    PlainText = Result
End If
CodierenPasswort = Result
  Exit Function
Fehler:
  Fehlermeldung Err.Number, Err.Description
End Function
************** ENDE VB
***************************************************************

Und das ist meine bisherige Umsetzung in PHP (habe den Verschlüsselungssteil weggelassen):

***************************************************************
****************************** PHP
function codieren($CipherText){
define('magic1',123);
define('magic2',4);
define('KeyValue','Verschlüsseltes Passwort');

$TextValue = $CipherText;

$Prev = magic1;
$KeyIndex = 1;
$KeyLen = strlen(KeyValue);

$pwlength = strlen($TextValue);

for ($j=0; $j < $KeyLen; $j++){
    $KeyChar[$j] = ord(substr(KeyValue, $j, 1));
  }

for ($i=0; $i < $pwlength; $i++){
      $char = ord(substr($TextValue, $i ,1));
      $newchar = $char XOR $KeyChar[$KeyIndex] XOR $Prev XOR bcmod(($i/magic2),255);
      $newchar = chr($newchar);
       $result = $result.$newchar;
       $Prev = $newchar;
       $KeyIndex = $KeyIndex + 1;
         If ($KeyIndex > $KeyLen){
            $KeyIndex = 1;
         }
  }
$PlainText= $result;
echo $PlainText;
}
********* ENDE PHP
***************************************************************

Wäre klasse wenn jemand eine zündende Idee hätte.

Danke und Gruß
Mitsu