Wer kann mir eine VB-Funktion in PHP "übersetzen" ?
TommyFilhiger
- php
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
Hallo TommyFilhiger,
Meine VB-Kenntnisse sind sehr bescheiden, aber vielleicht hilft dir ja das hier
Gruß,
Dieter
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
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
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;
}
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))) - 1for($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