Ich habe ein Script das mit einem .php Script kommuniziert
Der AutoIt Code zum verschlüsseln in RC4 sieht so aus
Func rc4($sKey, $sStr)
Local $s[256], $j = 0, $x, $res, $y, $i
Local $uBound
For $i = 0 To 255
$s[$i] = $i
Next
For $i = 0 To 255
$j = Mod(($j + $s[$i] + Asc(StringMid($sKey, Mod($i, StringLen($sKey))+1, 1))), 256)
$x = $s[$i]
$s[$i] = $s[$j]
$s[$j] = $x
Next
$i = 0
$j = 0
For $y = 0 To StringLen($sStr)-1
$i = Mod(($i + 1), 256)
$j = Mod(($j + $s[$i]), 256)
$x = $s[$i]
$s[$i] = $s[$j]
$s[$j] = $x
$res &= Chr(BitXOR(Asc(StringMid($sStr, $y+1, 1)), ($s[Mod(($s[$i] + $s[$j]), 256)])))
Next
Return $res
EndFunc
Alles anzeigen
Der PHP Code sieht so aus
function rc4($key, $str) {
$s = array();
for ($i = 0; $i < 256; $i++) {
$s[$i] = $i;
}
$j = 0;
for ($i = 0; $i < 256; $i++) {
$j = ($j + $s[$i] + ord($key[$i % strlen($key)])) % 256;
$x = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $x;
}
$i = 0;
$j = 0;
$res = '';
for ($y = 0; $y < strlen($str); $y++) {
$i = ($i + 1) % 256;
$j = ($j + $s[$i]) % 256;
$x = $s[$i];
$s[$i] = $s[$j];
$s[$j] = $x;
$res .= $str[$y] ^ chr($s[($s[$i] + $s[$j]) % 256]);
}
return $res;
}
Alles anzeigen
Diese beiden funktionieren auch prima miteinander, zumindest für mich und viele andere, für manche user jedoch nicht, momentan hab ich den Verdacht das es irgendwas mit der OS Sprache zu tun hat denn diese haben ein Chinesisches OS
z.B. sieht der verschlüsselte Code bei mir so aus
Zitat
0x67886FAA5051FDB8100A873B837D76C105E3F2F36F01C94520DEF841F63F3187B4BB5EC4C63CB4D69216BCAC03CF8E684F9C542FCBE42BE50E1051F2
Bei einem Chinesischem OS sieht der selbe Text encrypted allerdings so aus
Zitat0x673F6F3F50513F3F100A3F3B3F7D763F053F3F3F6F013F45203F3F413F3F313F3F3F5E3F3F3C3F3F3F163F3F033F3F684F3F542F3F3F2B3F0E10513F
(Die verschlüsselten Texte wurden mit StringToBinary umgewandelt)
habt ihr eine Idee warum es bei manchen einfach nicht funktionieren will oder kennt ihr eine bessere encrypt Funktion die bei AutoIt <--> PHP gut funktioniert?