Perfekt alles läuft nun, danke dir
Jetzt bleibt nur noch zu hoffen das die Verschlüsselung auch wirklich bei allen funktioniert
Perfekt alles läuft nun, danke dir
Jetzt bleibt nur noch zu hoffen das die Verschlüsselung auch wirklich bei allen funktioniert
PHP:
<?php
if (!function_exists('hex2bin')) {
function hex2bin($d) {
return pack("H*" , $d);
}
}
// PHP mit PKCS#5 Style Padding :
// (PKCS#5 : Daten mit AES zu verschlüsseln, die Multi-Byte Blockgröße besitzen)
function pkcs5_Pad($unpaddedString, $blockSize=16) {
$additionalChars = $blockSize - (strlen($unpaddedString) % $blockSize);
return $unpaddedString.str_repeat(chr($additionalChars), $additionalChars);
}
function pkcs5_Unpad($paddedString) {
$additionalChars = ord(substr($paddedString, -1, 1));
return substr($paddedString, 0, -$additionalChars);
}
function AESEncrypt($tString, $tKey) {
$iv = '9324463837711294'; // IV wird hier manuell gesetzt
$encrypttext = bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $tKey, pkcs5_Pad($tString), MCRYPT_MODE_CBC, $iv));
return $encrypttext;
}
function AESDecrypt($tString, $tKey) {
$iv = '9324463837711294'; // IV wird hier manuell gesetzt
$cleartext2 = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $tKey, hex2bin($tString), MCRYPT_MODE_CBC, $iv);
return $cleartext2;
}
$Decr = AESDecrypt("8a43daefb0a2ec446a92044a7c52434e", "155373196869-8375-8479-8045-5576");
echo '<p>' . utf8_encode($Decr) . '</p>'; // nur zur Anzeige
?>
Alles anzeigen
gibt das hier aus
das ist korrekt, ausser der letzte character vor dem </p>
EDIT: Dieser ungültige character wird hier auf autoit.de nicht angezeigt
AutoIt:
#include <Crypt.au3>
$Decr = _AESDecrypt("8a43daefb0a2ec446a92044a7c52434e","155373196869-8375-8479-8045-5576")
ConsoleWrite($Decr & @CRLF)
Func _AESDecrypt($tString, $tKey)
Local $IV = "9324463837711294"
_Crypt_Startup()
$tKey = _CryptImportKey($CALG_AES_256, $tKey, 32)
Const $KP_IV = 1
_CryptSetKeyParam($tKey, $KP_IV, $IV, 0, "str")
$Decrypt = BinaryToString(_Crypt_DecryptData(Binary($tString), $tKey, $CALG_USERKEY))
_Crypt_DestroyKey($tKey)
_Crypt_Shutdown()
Return $Decrypt
EndFunc
Func _AESEncrypt($tString, $tKey)
Local $IV = "9324463837711294"
_Crypt_Startup()
$tKey = _CryptImportKey($CALG_AES_256, $tKey, 32)
Const $KP_IV = 1
_CryptSetKeyParam($tKey, $KP_IV, $IV, 0, "str")
$Encrypt = _Crypt_EncryptData($tString, $tKey, $CALG_USERKEY)
_Crypt_DestroyKey($tKey)
_Crypt_Shutdown()
Return $Encrypt
EndFunc
Func _CryptImportKey($CALG, $bKey, $iKeyLength = -1)
If $iKeyLength < 1 Then $iKeyLength = BinaryLen($bKey)
Local $blob = DllStructCreate("align 1;BYTE bType;BYTE bVersion;WORD reserved;dword aiKeyAlg;dword keysize;byte key[" & $iKeyLength & "]")
DllStructSetData($blob, 1, 0x8)
DllStructSetData($blob, 2, 2)
DllStructSetData($blob, 4, $CALG)
DllStructSetData($blob, 5, $iKeyLength)
DllStructSetData($blob, 6, Binary($bKey))
Local $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptImportKey", "handle", __Crypt_Context(), "ptr", DllStructGetPtr($blob), "dword", DllStructGetSize($blob), "ptr", 0, "dword", 0, "ptr*", 0)
If @error Then Return SetError(2, @error, 0)
Return SetError(Not $aRet[0], 0, $aRet[6])
EndFunc
Func _CryptSetKeyParam($hKey, $iParam, $vValue, $iFlags=0, $sValType=Default)
If Not $sValType Or $sValType = Default Then $sValType = "ptr"
Local $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptSetKeyParam", "handle", $hKey, "uint", $iParam, $sValType, $vValue, "dword", $iFlags)
If @error Then Return SetError(2, @error, 0)
Return SetError(Not $aRet[0], 0, $aRet[0])
EndFunc
Alles anzeigen
Das gibt mir dann allerdings nur
Also mit AutoIt verschlüsseln dann zur .php senden dort entschlüsseln funktioniert, anders rum aber leider nicht.
Mit PHP den in PHP verschlüsselten String zu entschlüsseln funktioniert, den gleichen String mit dem gleichen Password in AutoIt zu entschlüsseln gibt allerdings nichts richtiges zurück
Oh man wie konnte ich das nur übersehen, vielen dank nochmal
Dein code funktioniert soweit, jetzt wollte ich das in eine easy to use funktion packen, bei AutoIt kenn ich mich gut aus da ging das ohne Probleme, aber bei PHP bin ich noch nicht ganz so erfahren
AutoIt:
#include <Crypt.au3>
Global $key = "SomePassword"; // 32 byte key --> AES-256
$Encr = _AESEncrypt("test1234",$key)
ConsoleWrite($Encr & @CRLF)
$Decr = _AESDecrypt($Encr,$key)
ConsoleWrite($Decr & @CRLF)
Func _AESDecrypt($tString, $tKey)
Local $IV = "9324463837711294"
_Crypt_Startup()
$tKey = _CryptImportKey($CALG_AES_256, $tKey, 32)
Const $KP_IV = 1
_CryptSetKeyParam($tKey, $KP_IV, $IV, 0, "str")
$Decrypt = BinaryToString(_Crypt_DecryptData(Binary($tString), $tKey, $CALG_USERKEY))
_Crypt_DestroyKey($tKey)
_Crypt_Shutdown()
Return $Decrypt
EndFunc
Func _AESEncrypt($tString, $tKey)
Local $IV = "9324463837711294"
_Crypt_Startup()
$tKey = _CryptImportKey($CALG_AES_256, $tKey, 32)
Const $KP_IV = 1
_CryptSetKeyParam($tKey, $KP_IV, $IV, 0, "str")
$Encrypt = _Crypt_EncryptData($tString, $tKey, $CALG_USERKEY)
_Crypt_DestroyKey($tKey)
_Crypt_Shutdown()
Return $Encrypt
EndFunc
Func _CryptImportKey($CALG, $bKey, $iKeyLength = -1)
If $iKeyLength < 1 Then $iKeyLength = BinaryLen($bKey)
Local $blob = DllStructCreate("align 1;BYTE bType;BYTE bVersion;WORD reserved;dword aiKeyAlg;dword keysize;byte key[" & $iKeyLength & "]")
DllStructSetData($blob, 1, 0x8)
DllStructSetData($blob, 2, 2)
DllStructSetData($blob, 4, $CALG)
DllStructSetData($blob, 5, $iKeyLength)
DllStructSetData($blob, 6, Binary($bKey))
Local $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptImportKey", "handle", __Crypt_Context(), "ptr", DllStructGetPtr($blob), "dword", DllStructGetSize($blob), "ptr", 0, "dword", 0, "ptr*", 0)
If @error Then Return SetError(2, @error, 0)
Return SetError(Not $aRet[0], 0, $aRet[6])
EndFunc
Func _CryptSetKeyParam($hKey, $iParam, $vValue, $iFlags=0, $sValType=Default)
If Not $sValType Or $sValType = Default Then $sValType = "ptr"
Local $aRet = DllCall(__Crypt_DllHandle(), "bool", "CryptSetKeyParam", "handle", $hKey, "uint", $iParam, $sValType, $vValue, "dword", $iFlags)
If @error Then Return SetError(2, @error, 0)
Return SetError(Not $aRet[0], 0, $aRet[0])
EndFunc
Alles anzeigen
PHP Code:
<?php
if (!function_exists('hex2bin')) {
function hex2bin($d) {
return pack("H*" , $d);
}
}
// PHP mit PKCS#5 Style Padding :
// (PKCS#5 : Daten mit AES zu verschlüsseln, die Multi-Byte Blockgröße besitzen)
function pkcs5_Pad($unpaddedString, $blockSize=16) {
$additionalChars = $blockSize - (strlen($unpaddedString) % $blockSize);
return $unpaddedString.str_repeat(chr($additionalChars), $additionalChars);
}
function pkcs5_Unpad($paddedString) {
$additionalChars = ord(substr($paddedString, -1, 1));
return substr($paddedString, 0, -$additionalChars);
}
function AESEncrypt($tString, $tKey) {
$iv = '9324463837711294'; // IV wird hier manuell gesetzt
$encrypttext = bin2hex(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $tKey, pkcs5_Pad($tString), MCRYPT_MODE_CBC, $iv));
return $encrypttext;
}
function AESDecrypt($tString, $tKey) {
$iv = '9324463837711294'; // IV wird hier manuell gesetzt
$cleartext2 = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $tKey, hex2bin($tString), MCRYPT_MODE_CBC, $iv);
return $cleartext2;
}
$Encr = AESEncrypt("test1234","SomePassword");
echo '<p>' . utf8_encode($Encr) . '</p>'; // nur zur Anzeige
$Decr = AESEncrypt($Encr,"SomePassword");
echo '<p>' . utf8_encode($Decr) . '</p>'; // nur zur Anzeige
?>
Alles anzeigen
Die PHP gibt mir allerdings immer nur das zurück
<p></p><p></p> |
Perfekt ich versuchs gleich mal aus, vielen vielen dank
Ja beides muss gehen, ein Text wird verschlüsselt von AutoIt und an die .php gesendet diese entschlüsselt den Text, verarbeitet diesen und gibt einen verschlüsselten Text aus den man mit AutoIt wieder entschlüsselt
Ich weis allerdings fehlt mir da eine gescheite Verschlüsselungs / Entschlüsselungs Funktion die mit AutoIt <-> PHP funktioniert.
Ja Crypt hab ich schon damals immer benutzt das Problem ist allerdings das ich den verschlüsselten Text davon nicht in PHP entschlüsseln kann, da fehlt mir einfach die Funktion für.
Ich möchte das ganze schon verschlüsselt übertragen gibt ja genug Programme mit den man den Traffic mitlesen kann, da soll er nicht auch noch lesbar sein.
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?
Mein Script läuft mit und braucht #RequireAdmin, nun will ich ein Program ausführen mit dem Script aber alle Prozesse die von dem Script gestartet werden erhalten automatisch auch Adminrechte, weis jemand ein Umweg?
Edit: nevermind, scheint ich habs schon gefunden https://www.autoitscript.com/forum/topic/12…ucedprivileges/
Soweit ich weis ist es unmöglich bei den meisten USB Ports den Strom auszustellen aber ihr wisst da sicher mehr, ich würde mit einem Script gerne einen USB Fan aus-an schalten können
Naja +90 ist schon ok. Aber dann folgt noch eine Bereichsabfrage, damit man die daraus entstehenden Fälle über 180° korrekt behandelt.
Da es aber 90°-Differenzen zum normalen Arkustangens sind, kann man alternativ auch durch entsprechendes umstellen der Parameter von atan2 eine Drehum um 90° erreichen.
Entspricht dies dem was du erreichen möchtest?:
AutoIt Alles anzeigenIf Not IsDeclared("PI") Then Global Const $PI = ACos(-1) Global Const $rad2deg = 180.0 / $PI Global Const $deg2rad = $PI / 180.0 ; Koordinaten Global $pt_A = [0, 0, 0] ; Kamerakoordinaten [X,Y,Z] Global $pt_B = [5, 5, 5] ; Punktkoordinaten [X,Y,Z] Global $f_Yaw = _calcYaw($pt_A, $pt_B) Global $f_Pitch = _calcPitch($pt_A, $pt_B) ConsoleWrite(StringFormat("% 10s: % 7.2f°\n% 10s: % 7.2f°\n", "Yaw", $f_Yaw * $rad2deg, "Pitch", $f_Pitch * $rad2deg)) #Region Funktionen Func _calcYaw($pt_From, $pt_To) Return atan2($pt_To[0] - $pt_From[0], -($pt_To[1] - $pt_From[1])) EndFunc ;==>_calcYaw Func _calcPitch($pt_From, $pt_To) Local $f_R2D = Sqrt(($pt_To[0] - $pt_From[0])^2 + ($pt_To[1] - $pt_From[1])^2) ; der Abstand auf der X-Y-Ebene Return -atan2($pt_To[2] - $pt_From[2], $f_R2D) EndFunc ;==>_calcPitch Func atan2($y, $x) If $y = 0 And $x < 0 Then Return $PI Return (2 * ATan($y / ($x + Sqrt($x * $x + $y * $y)))) EndFunc ;==>atan2 #EndRegion Funktionen
Wow vielen vielen Dank
Funktioniert einwandfrei
Alles anzeigenKeine Lösung für dein Problem, aber ein kleiner Hinweis zur verwendeten Syntax :
Innerhalb der Funktion _NullifyCoord deklarierst Du globale Variablen. Das ist etwas, dass man grundsätzlich vermeiden sollte, auch wenn es die Lauffähigkeit des Skriptes nicht notwendigerweise einschränkt.
Du kannst ja spaßeshalber mal folgendes Testskript ausführen :
AutoIt Alles anzeigen; Test für globale Deklaration von Variablen in Funktionen : Global $sGlobalStr = 'Global deklarierter String' _DeclareGlobalInFunc() ConsoleWrite('@@ MAIN : ---------- Ausgabe im Hauptteil des Skriptes : ' & @CRLF) ConsoleWrite('@@ MAIN : GlobalStr = ' & $sGlobalStr & @CRLF) ; Dieser Aufruf erzeugt den Warnhinweis : ; warning: $sLocalGlobalStr: possibly used before declaration. ConsoleWrite('@@ MAIN : LocalGlobalStr = ' & $sLocalGlobalStr & @CRLF & @CRLF) Func _DeclareGlobalInFunc() Local $sLocalStr = 'In Funktion mit Local deklarierter String' Global $sLocalGlobalStr = 'In Funktion mit Global deklarierter String' ConsoleWrite('@@ FUNC: ---------- Ausgabe in Funktion _DeclareGlobalInFunc : ' & @CRLF) ConsoleWrite('@@ FUNC: LocalStr = ' & $sLocalStr & @CRLF) ConsoleWrite('@@ FUNC: LocalGlobalStr = ' & $sLocalGlobalStr & @CRLF & @CRLF) EndFunc ;==>_DeclareGlobalInFunc
Dieser Warnhinweis läßt sich, soweit ich weiß, zwar abschalten, trotzdem ist diese Vorgehensweise nicht empfehlenswert.
Solltest Du allerdings mit dem Skript von AspirinJunkie weitermachen, dann ist dieser Punkt bereits erledigt.
Gruß Musashi
Danke danke ich weis das ganze war sehr unordentlich geschrieben, in meinen richtigen Programmen mach ich das normal auch nicht ganz so :p nur bei Testscripts wo man schnell mal was ändert und rumexperimentiert bis man es zum laufen bekommt kann das schnell unordentlich aussehen
Alles anzeigenUm die Frage abschließend zu klären fehlen ein paar wichtige Infos.
Vor allem wie denn deine eingezeichneten Winkelangaben im Koordinatensystem liegen.
Sprich: In welche Richtung zeigt denn die X bzw. Y-Achse?
Ansonsten sagst du dass du falsche Ergebnisse erhälst.
Was ist konkret falsch daran?
Was wären denn die richtigen Ergebnisse?
Mit den bisherigen Angaben und ein paar notwendigen Annahmen meinerseits hätte ich so angefangen:
AutoIt Alles anzeigenIf Not IsDeclared("PI") Then Global Const $PI = ACos(-1) Global Const $rad2deg = 180.0 / $PI Global Const $deg2rad = $PI / 180.0 ; Koordinaten Global $pt_A = [0, 0, 0] ; Kamerakoordinaten [X,Y,Z] Global $pt_B = [5, 5, 5] ; Punktkoordinaten [X,Y,Z] Global $f_Yaw = _calcYaw($pt_A, $pt_B) Global $f_Pitch = _calcPitch($pt_A, $pt_B) ConsoleWrite(StringFormat("Yaw: % 6.2f°\nPitch: % 6.2f°\n", $f_Yaw * $rad2deg, $f_Pitch * $rad2deg)) #Region Funktionen Func _calcYaw($pt_From, $pt_To) Local $Yaw = atan2($pt_To[1] - $pt_From[1], $pt_To[0] - $pt_From[0]) Return $Yaw EndFunc ;==>_calcYaw Func _calcPitch($pt_From, $pt_To) Local $f_R2D = Sqrt(($pt_To[0] - $pt_From[0])^2 + ($pt_To[1] - $pt_From[1])^2) ; der Abstand auf der X-Y-Ebene Local $Yaw = atan2($pt_To[2] - $pt_From[2], $f_R2D) Return $Yaw EndFunc ;==>_calcPitch Func atan2($y, $x) Return (2 * ATan($y / ($x + Sqrt($x * $x + $y * $y)))) EndFunc ;==>atan2 #EndRegion Funktionen
Wow der Code funktioniert schon wunderbar, das Ergebnis ist nahezu komplett richtig
Bei den Coordinaten die du verwendet hast kommt das raus
Yaw: 45°
Pitch: 35.26°
richtig halber müsste es aber so sein
Yaw: 135°
Pitch: -35.26°
bei Pitch müsste ich das ganze also einfach *(-1) rechnen aber bei Yaw bin ich mir nicht so sicher, wenn ich immer +90 hinzufüge wirds wohl nicht ganz stimmen, ihr habt doch bestimmt ne bessere Lösung als +90 oder?
Ich hab jetzt schon stunden gegoogelt aber finde keine lösung das ganze in Autoit umzusetzen
Ich habe 2 Punkte im 3D raum zum einen die Kamera zum anderen den punkt wo ich hinschauen möchte, nur bekomm ich immer falsche Ergebnisse raus
Hier ein Bild zum verständnis was ich suche
[Blockierte Grafik: https://image.ibb.co/icmVLw/camera.png]
hier ist der Code den ich schon testweise habe
Global $Distance2D = 0, $Distance3D = 0
ConsoleWrite("Camera Yaw: " & _GetCamYaw(0,0,0,5,5,5) & @CRLF & "Camera Pitch: " & _GetCamPitch(0,0,0,5,5,5) & @CRLF & "Distance3D: " & $Distance3D & @CRLF)
Func _NullifyCoord($_Own_X, $_Own_Y, $_Own_Z, $_T_X, $_T_Y, $_T_Z)
Global $dx = $_T_X - $_Own_X
Global $dy = $_T_Y - $_Own_Y
Global $dz = $_T_Z - $_Own_Z
Global $dx2 = $dx*$dx
Global $dy2 = $dy*$dy
Global $dz2 = $dz*$dz
Global $Distance2D = Sqrt($dx2 + $dy2)
Global $Distance3D = Sqrt($dx2 + $dy2 + $dz2)
EndFunc
Func _GetCamYaw($Own_X, $Own_Y, $Own_Z, $T_X, $T_Y, $T_Z)
_NullifyCoord($Own_X, $Own_Y, $Own_Z, $T_X, $T_Y, $T_Z)
Return atan2($dy,$dx)
EndFunc
Func _GetCamPitch($Own_X, $Own_Y, $Own_Z, $T_X, $T_Y, $T_Z)
_NullifyCoord($Own_X, $Own_Y, $Own_Z, $T_X, $T_Y, $T_Z)
$rotx = atan2($dy,$dx); <-- from some tests
$roty = atan2($dx* Cos($rotx), $dz); <-- from some tests
$rotz = atan2(Cos($rotx), Sin($rotx) * Sin($roty)); <-- from some tests
Return atan2($dz,$Distance3D)
EndFunc
Func atan2($y, $x)
Return (2 * ATan($y / ($x + Sqrt($x * $x + $y * $y))))
EndFunc
Alles anzeigen
Hat sich erledigt, hab es mittlerweile hinbekommen trotzdem danke
Wenn jemand eine Lösung findet wäre ich sogar bereit 10€ über Paypal zu bezahlen
Nein es handelt sich nicht um das selbe Programm und bei Controlclick bekommt man auch den Fensterfokus genauso wie bei SendMessage und PostMessage
Wenn ich mit SendMessage oder PostMessage einen Linksklick auf ein anderes Fenster mache funktioniert das auch alles wunderbar nur denkt sich Windows wohl automatisch das dieses Fenster fokusiert werden soll, kann man das umgehen?