Jo,
hier release ich eine experimentelle Version meiner refactoring Tools für Autoit.
Diese Bibliothek ist als Nebenprodukt meines AutoJIT Projekts entstanden und hat noch ihre Macken ;)
Ist aber schon sehr nützlich.
Ihr könnt damit Autoit code parsen und danach den Baum manipulieren. Dazu stehen ein paar Basisklassen bereit.
Hier habt ihr schonmal 2 Beispiele:
Simple Variable Obfuscator
Einfaches implementieren von Debug code
Davor:
Danach:
Ein paar weitere Sätze zum wie usw. werde ich die Tage noch hier und [Only registered and activated users can see links. Click Here To Register...] posten.
hier release ich eine experimentelle Version meiner refactoring Tools für Autoit.
Diese Bibliothek ist als Nebenprodukt meines AutoJIT Projekts entstanden und hat noch ihre Macken ;)
Ist aber schon sehr nützlich.
Ihr könnt damit Autoit code parsen und danach den Baum manipulieren. Dazu stehen ein paar Basisklassen bereit.
Hier habt ihr schonmal 2 Beispiele:
Simple Variable Obfuscator
Code:
public class AutoitSimpleObfuscator
{
private readonly IScriptParser _scriptParser;
public AutoitSimpleObfuscator()
{
var parserBootStrapper = new ParserBootStrapper();
_scriptParser = parserBootStrapper.GetInstance<IScriptParser>();
}
public string Process(string autoitCode)
{
AutoitScriptRoot autoitScriptRoot = _scriptParser.ParseScript(autoitCode, new PragmaOptions());
var rewriter = new ObfuscatorRewriter();
ISyntaxNode newTree = rewriter.Visit(autoitScriptRoot);
return newTree.ToSource();
}
}
public class ObfuscatorRewriter : SyntaxRewriterBase
{
private readonly Dictionary<string, string> _variableNames = new Dictionary<string, string>();
private readonly IAutoitSyntaxFactory _syntaxFactory = new AutoitSyntaxFactory( new TokenFactory() );
private readonly ITokenFactory _tokenFactory = new TokenFactory();
public override ISyntaxNode VisitToken( TokenNode node ) {
if ( !( node.Parent is VariableExpression || node.Parent is AutoitParameter ) ) {
return base.VisitToken( node );
}
var variableName = node.Token.Value.StringValue;
if ( !_variableNames.ContainsKey( variableName ) ) {
_variableNames.Add( variableName, Guid.NewGuid().ToString( "N" ) );
}
return _syntaxFactory.CreateTokenNode( _tokenFactory.CreateVariable( _variableNames[variableName], 0, 0 ) );
}
}
Einfaches implementieren von Debug code
Code:
public class AutoitLoggingWriter
{
private readonly IScriptParser _scriptParser;
public AutoitLoggingWriter() {
var parserBootStrapper = new ParserBootStrapper();
_scriptParser = parserBootStrapper.GetInstance<IScriptParser>();
}
public string Process( string autoitCode ) {
AutoitScriptRoot autoitScriptRoot = _scriptParser.ParseScript(autoitCode, new PragmaOptions());
var rewriter = new LoggingRewriter();
ISyntaxNode newTree = rewriter.Visit(autoitScriptRoot);
return newTree.ToSource();
}
}
public class LoggingRewriter : SyntaxRewriterBase
{
private readonly IAutoitSyntaxFactory _syntaxFactory = new AutoitSyntaxFactory( new TokenFactory() );
private readonly ITokenFactory _tokenFactory = new TokenFactory();
public override ISyntaxNode VisitAssignStatement( AssignStatement node ) {
var assignStatement = (AssignStatement)base.VisitAssignStatement( node );
var logStatement = GetLineLogStatement( assignStatement );
var logValueStatement = GetLineValueLogStatement( node );
return _syntaxFactory.CreateBlockStatement(new List<IStatementNode>() { assignStatement, logStatement, logValueStatement });
}
private FunctionCallStatement GetLineValueLogStatement( AssignStatement node ) {
var logFunctionName = _syntaxFactory.CreateTokenNode( "ConsoleWrite" );
var stringLiteralExpression = _syntaxFactory.CreateStringLiteralExpression( string.Format( "New Value of {0}: ", node.Variable.ToSource() ) );
var concatedExpression = _syntaxFactory.CreateBinaryExpression( stringLiteralExpression, (IExpressionNode) node.Variable.Clone(), _syntaxFactory.CreateTokenNode( _tokenFactory.CreateConcat( 0, 0 ) ) );
var logExpression = _syntaxFactory.CreateCallExpression( logFunctionName, new List<IExpressionNode>() { concatedExpression } );
return _syntaxFactory.CreateFunctionCallStatement( logExpression );
}
private FunctionCallStatement GetLineLogStatement( ISyntaxNode assignStatement ) {
var logFunctionName = _syntaxFactory.CreateTokenNode( "ConsoleWrite" );
var toLog = string.Format( "Executed assignment: {0}", assignStatement.ToSource() );
var stringLiteralExpression = _syntaxFactory.CreateStringLiteralExpression( toLog );
var logExpression = _syntaxFactory.CreateCallExpression( logFunctionName, new List<IExpressionNode>() { stringLiteralExpression } );
var logStatement = _syntaxFactory.CreateFunctionCallStatement( logExpression );
return logStatement;
}
}
Davor:
PHP Code:
$temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 0x55555555)
$right = BitXOR($right, $temp)
$left = BitXOR($left, BitShift($temp, -1))
Code:
;=============================================================================== ; Autoit version ; Paul Tero, July 2001 ; http:; www.tero.co.uk/des/ ; ; Optimised for performance with large blocks by Michael Hayworth, November 2001 ; http:; www.netdealing.com ; ; Converted from JavaScript/PHP to AutoIt by Matthew Robinson, April 2007 ; ; THIS SOFTWARE IS PROVIDED "AS IS" AND ; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ; ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE ; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ; OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ; SUCH DAMAGE. ;================================================================================ $timer = TimerInit() For $lol = 0 To 1337 Local $key = "8787878787878787" Local $message = "Supercalifradialisticexpialidocious" Local $ciphertext = des($key, $message, 1) Local $recovered_message = des($key, $ciphertext, 0) Next $diff = TimerDiff($timer) ConsoleWrite($diff) Sleep(10000) Exit $diff ;=================================================================== ; des ; this takes the key, the message, and whether to encrypt or decrypt ; Error Codes Returned: ; -1 : Incorrect Key Length (must be 16 or 48) ;=================================================================== Func des($key, $message, $encrypt, $mode = 0, $iv = '') ; declaring this locally speeds things up a bit Local $spfunction1[64] = [0x1010400, 0, 0x10000, 0x1010404, 0x1010004, 0x10404, 0x4, 0x10000, 0x400, 0x1010400, 0x1010404, 0x400, 0x1000404, 0x1010004, 0x1000000, 0x4, 0x404, 0x1000400, 0x1000400, 0x10400, 0x10400, 0x1010000, 0x1010000, 0x1000404, 0x10004, 0x1000004, 0x1000004, 0x10004, 0, 0x404, 0x10404, 0x1000000, 0x10000, 0x1010404, 0x4, 0x1010000, 0x1010400, 0x1000000, 0x1000000, 0x400, 0x1010004, 0x10000, 0x10400, 0x1000004, 0x400, 0x4, 0x1000404, 0x10404, 0x1010404, 0x10004, 0x1010000, 0x1000404, 0x1000004, 0x404, 0x10404, 0x1010400, 0x404, 0x1000400, 0x1000400, 0, 0x10004, 0x10400, 0, 0x1010004] Local $spfunction2[64] = [-0x7fef7fe0, -0x7fff8000, 0x8000, 0x108020, 0x100000, 0x20, -0x7fefffe0, -0x7fff7fe0, -0x7fffffe0, -0x7fef7fe0, -0x7fef8000, -0x80000000, -0x7fff8000, 0x100000, 0x20, -0x7fefffe0, 0x108000, 0x100020, -0x7fff7fe0, 0, -0x80000000, 0x8000, 0x108020, -0x7ff00000, 0x100020, -0x7fffffe0, 0, 0x108000, 0x8020, -0x7fef8000, -0x7ff00000, 0x8020, 0, 0x108020, -0x7fefffe0, 0x100000, -0x7fff7fe0, -0x7ff00000, -0x7fef8000, 0x8000, -0x7ff00000, -0x7fff8000, 0x20, -0x7fef7fe0, 0x108020, 0x20, 0x8000, -0x80000000, 0x8020, -0x7fef8000, 0x100000, -0x7fffffe0, 0x100020, -0x7fff7fe0, -0x7fffffe0, 0x100020, 0x108000, 0, -0x7fff8000, 0x8020, -0x80000000, -0x7fefffe0, -0x7fef7fe0, 0x108000] Local $spfunction3[64] = [0x208, 0x8020200, 0, 0x8020008, 0x8000200, 0, 0x20208, 0x8000200, 0x20008, 0x8000008, 0x8000008, 0x20000, 0x8020208, 0x20008, 0x8020000, 0x208, 0x8000000, 0x8, 0x8020200, 0x200, 0x20200, 0x8020000, 0x8020008, 0x20208, 0x8000208, 0x20200, 0x20000, 0x8000208, 0x8, 0x8020208, 0x200, 0x8000000, 0x8020200, 0x8000000, 0x20008, 0x208, 0x20000, 0x8020200, 0x8000200, 0, 0x200, 0x20008, 0x8020208, 0x8000200, 0x8000008, 0x200, 0, 0x8020008, 0x8000208, 0x20000, 0x8000000, 0x8020208, 0x8, 0x20208, 0x20200, 0x8000008, 0x8020000, 0x8000208, 0x208, 0x8020000, 0x20208, 0x8, 0x8020008, 0x20200] Local $spfunction4[64] = [0x802001, 0x2081, 0x2081, 0x80, 0x802080, 0x800081, 0x800001, 0x2001, 0, 0x802000, 0x802000, 0x802081, 0x81, 0, 0x800080, 0x800001, 0x1, 0x2000, 0x800000, 0x802001, 0x80, 0x800000, 0x2001, 0x2080, 0x800081, 0x1, 0x2080, 0x800080, 0x2000, 0x802080, 0x802081, 0x81, 0x800080, 0x800001, 0x802000, 0x802081, 0x81, 0, 0, 0x802000, 0x2080, 0x800080, 0x800081, 0x1, 0x802001, 0x2081, 0x2081, 0x80, 0x802081, 0x81, 0x1, 0x2000, 0x800001, 0x2001, 0x802080, 0x800081, 0x2001, 0x2080, 0x800000, 0x802001, 0x80, 0x800000, 0x2000, 0x802080] Local $spfunction5[64] = [0x100, 0x2080100, 0x2080000, 0x42000100, 0x80000, 0x100, 0x40000000, 0x2080000, 0x40080100, 0x80000, 0x2000100, 0x40080100, 0x42000100, 0x42080000, 0x80100, 0x40000000, 0x2000000, 0x40080000, 0x40080000, 0, 0x40000100, 0x42080100, 0x42080100, 0x2000100, 0x42080000, 0x40000100, 0, 0x42000000, 0x2080100, 0x2000000, 0x42000000, 0x80100, 0x80000, 0x42000100, 0x100, 0x2000000, 0x40000000, 0x2080000, 0x42000100, 0x40080100, 0x2000100, 0x40000000, 0x42080000, 0x2080100, 0x40080100, 0x100, 0x2000000, 0x42080000, 0x42080100, 0x80100, 0x42000000, 0x42080100, 0x2080000, 0, 0x40080000, 0x42000000, 0x80100, 0x2000100, 0x40000100, 0x80000, 0, 0x40080000, 0x2080100, 0x40000100] Local $spfunction6[64] = [0x20000010, 0x20400000, 0x4000, 0x20404010, 0x20400000, 0x10, 0x20404010, 0x400000, 0x20004000, 0x404010, 0x400000, 0x20000010, 0x400010, 0x20004000, 0x20000000, 0x4010, 0, 0x400010, 0x20004010, 0x4000, 0x404000, 0x20004010, 0x10, 0x20400010, 0x20400010, 0, 0x404010, 0x20404000, 0x4010, 0x404000, 0x20404000, 0x20000000, 0x20004000, 0x10, 0x20400010, 0x404000, 0x20404010, 0x400000, 0x4010, 0x20000010, 0x400000, 0x20004000, 0x20000000, 0x4010, 0x20000010, 0x20404010, 0x404000, 0x20400000, 0x404010, 0x20404000, 0, 0x20400010, 0x10, 0x4000, 0x20400000, 0x404010, 0x4000, 0x400010, 0x20004010, 0, 0x20404000, 0x20000000, 0x400010, 0x20004010] Local $spfunction7[64] = [0x200000, 0x4200002, 0x4000802, 0, 0x800, 0x4000802, 0x200802, 0x4200800, 0x4200802, 0x200000, 0, 0x4000002, 0x2, 0x4000000, 0x4200002, 0x802, 0x4000800, 0x200802, 0x200002, 0x4000800, 0x4000002, 0x4200000, 0x4200800, 0x200002, 0x4200000, 0x800, 0x802, 0x4200802, 0x200800, 0x2, 0x4000000, 0x200800, 0x4000000, 0x200800, 0x200000, 0x4000802, 0x4000802, 0x4200002, 0x4200002, 0x2, 0x200002, 0x4000000, 0x4000800, 0x200000, 0x4200800, 0x802, 0x200802, 0x4200800, 0x802, 0x4000002, 0x4200802, 0x4200000, 0x200800, 0, 0x2, 0x4200802, 0, 0x200802, 0x4200000, 0x800, 0x4000002, 0x4000800, 0x800, 0x200002] Local $spfunction8[64] = [0x10001040, 0x1000, 0x40000, 0x10041040, 0x10000000, 0x10001040, 0x40, 0x10000000, 0x40040, 0x10040000, 0x10041040, 0x41000, 0x10041000, 0x41040, 0x1000, 0x40, 0x10040000, 0x10000040, 0x10001000, 0x1040, 0x41000, 0x40040, 0x10040040, 0x10041000, 0x1040, 0, 0, 0x10040040, 0x10000040, 0x10001000, 0x41040, 0x40000, 0x41040, 0x40000, 0x10041000, 0x1000, 0x40, 0x10040040, 0x1000, 0x41040, 0x10001000, 0x40, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x40000, 0x10001040, 0, 0x10041040, 0x40040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0, 0x10041040, 0x41000, 0x41000, 0x1040, 0x1040, 0x40040, 0x10000000, 0x10041000] Local $masks[33] = [4294967295, 2147483647, 1073741823, 536870911, 268435455, 134217727, 67108863, 33554431, 16777215, 8388607, 4194303, 2097151, 1048575, 524287, 262143, 131071, 65535, 32767, 16383, 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0] Local $fill ; create the 16 or 48 subkeys we will need $keys = des_createKeys($key) If @error == 1 Then SetError(-1) Return 0 EndIf $m = 0 $chunk = 0 ; set up the loops for single and triple des If UBound($keys) == 32 Then Local $iterations = 3 Else Local $iterations = 9 EndIf If ($iterations == 3) Then If $encrypt == 1 Then Local $looping[3] = [0, 32, 2] Else Local $looping[3] = [30, -2, -2] EndIf Else If $encrypt == 1 Then Local $looping[9] = [0, 32, 2, 62, 30, -2, 64, 96, 2] Else Local $looping[9] = [94, 62, -2, 32, 64, 2, 30, -2, -2] EndIf EndIf If $encrypt == 1 Then $fill = 8 If Mod(StringLen($message), 8) <> 0 Then $fill = 8 - Mod(StringLen($message), 8) EndIf For $i = 1 To $fill $message &= Chr($fill) Next EndIf $len = StringLen($message) ; store the result here $result = "" $tempresult = "" If ($mode == 1) Then ; CBC mode $cbcleft = BitOR(BitShift(Asc(StringMid($iv, 1, 1)), -24), BitShift(Asc(StringMid($iv, 2, 1)), -16), BitShift(Asc(StringMid($iv, 3, 1)), -8), Asc(StringMid($iv, 4, 1))) $cbcright = BitOR(BitShift(Asc(StringMid($iv, 5, 1)), -24), BitShift(Asc(StringMid($iv, 6, 1)), -16), BitShift(Asc(StringMid($iv, 7, 1)), -8), Asc(StringMid($iv, 8, 1))) EndIf ; loop through each 64 bit chunk of the message While $m < $len $left = BitOR(BitShift(Asc(StringMid($message, $m + 1, 1)), -24), BitShift(Asc(StringMid($message, $m + 2, 1)), -16), BitShift(Asc(StringMid($message, $m + 3, 1)), -8), Asc(StringMid($message, $m + 4, 1))) $right = BitOR(BitShift(Asc(StringMid($message, $m + 5, 1)), -24), BitShift(Asc(StringMid($message, $m + 6, 1)), -16), BitShift(Asc(StringMid($message, $m + 7, 1)), -8), Asc(StringMid($message, $m + 8, 1))) $m += 8 ; for Cipher Block Chaining mode, xor the message with the previous result If $mode == 1 Then If $encrypt Then $left = BitXOR($left, $cbcleft) $right = BitXOR($right, $cbcright) Else $cbcleft2 = $cbcleft $cbcright2 = $cbcright $cbcleft = $left $cbcright = $right EndIf EndIf ; first each 64 but chunk of the message must be permuted according to IP $temp = BitAND(BitXOR(BitAND(BitShift($left, 4), $masks[4]), $right), 0x0f0f0f0f) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -4)) $temp = BitAND(BitXOR(BitAND(BitShift($left, 16), $masks[16]), $right), 0x0000ffff) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -16)) $temp = BitAND(BitXOR(BitAND(BitShift($right, 2), $masks[2]), $left), 0x33333333) $left = BitXOR($left, $temp) $right = BitXOR($right, BitShift($temp, -2)) $temp = BitAND(BitXOR(BitAND(BitShift($right, 8), $masks[8]), $left), 0x00ff00ff) $left = BitXOR($left, $temp) $right = BitXOR($right, BitShift($temp, -8)) $temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 0x55555555) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -1)) $left = BitOR(BitShift($left, -1), BitAND(BitShift($left, 31), $masks[31])) $right = BitOR(BitShift($right, -1), BitAND(BitShift($right, 31), $masks[31])) ; do this either 1 or 3 times for each chunk of the message For $j = 0 To $iterations - 1 Step 3 $endloop = $looping[$j + 1] $loopinc = $looping[$j + 2] ; now go through and perform the encryption or decryption $i = $looping[$j] While $i <> $endloop ; for efficiency $right1 = BitXOR($right, $keys[$i]) $right2 = BitXOR(BitOR(BitAND(BitShift($right, 4), $masks[4]), BitShift($right, -28)), $keys[$i + 1]) ; the result is attained by passing these bytes through the S selection functions $temp = $left $left = $right $right = BitXOR($temp, BitOR($spfunction2[BitAND(BitAND(BitShift($right1, 24), $masks[24]), 0x3f)], $spfunction4[BitAND(BitAND(BitShift($right1, 16), $masks[16]), 0x3f)], $spfunction6[BitAND(BitAND(BitShift($right1, 8), $masks[8]), 0x3f)], $spfunction8[BitAND($right1, 0x3f)], $spfunction1[BitAND(BitAND(BitShift($right2, 24), $masks[24]), 0x3f)], $spfunction3[BitAND(BitAND(BitShift($right2, 16), $masks[16]), 0x3f)], $spfunction5[BitAND(BitAND(BitShift($right2, 8), $masks[8]), 0x3f)], $spfunction7[BitAND($right2, 0x3f)])) $i += $loopinc WEnd ; unreverse left and right $temp = $left $left = $right $right = $temp Next ; for either 1 or 3 iterations ; move then each one bit to the right $left = BitOR(BitAND(BitShift($left, 1), $masks[1]), BitShift($left, -31)) $right = BitOR(BitAND(BitShift($right, 1), $masks[1]), BitShift($right, -31)) ; now perform IP-1, which is IP in the opposite direction $temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 0x55555555) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -1)) $temp = BitAND(BitXOR(BitAND(BitShift($right, 8), $masks[8]), $left), 0x00ff00ff) $left = BitXOR($left, $temp) $right = BitXOR($right, BitShift($temp, -8)) $temp = BitAND(BitXOR(BitAND(BitShift($right, 2), $masks[2]), $left), 0x33333333) $left = BitXOR($left, $temp) $right = BitXOR($right, BitShift($temp, -2)) $temp = BitAND(BitXOR(BitAND(BitShift($left, 16), $masks[16]), $right), 0x0000ffff) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -16)) $temp = BitAND(BitXOR(BitAND(BitShift($left, 4), $masks[4]), $right), 0x0f0f0f0f) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -4)) ; for Cipher Block Chaining mode, xor the message with the previous result If $mode == 1 Then If $encrypt == 1 Then $cbcleft = $left $cbcright = $right Else $left = BitXOR($left, $cbcleft2) $right = BitXOR($right, $cbcright2) EndIf EndIf $tempresult &= Chr(BitAND(BitShift($left, 24), $masks[24])) $tempresult &= Chr(BitAND(BitAND(BitShift($left, 16), $masks[16]), 0xff)) $tempresult &= Chr(BitAND(BitAND(BitShift($left, 8), $masks[8]), 0xff)) $tempresult &= Chr(BitAND($left, 0xff)) $tempresult &= Chr(BitAND(BitShift($right, 24), $masks[24])) $tempresult &= Chr(BitAND(BitAND(BitShift($right, 16), $masks[16]), 0xff)) $tempresult &= Chr(BitAND(BitAND(BitShift($right, 8), $masks[8]), 0xff)) $tempresult &= Chr(BitAND($right, 0xff)) $chunk += 8 If $chunk == 512 Then $result &= $tempresult $tempresult = "" $chunk = 0 EndIf WEnd ; for every 8 characters, or 64 bits in the message $result &= $tempresult If $encrypt == 0 Then $fill = Asc(StringRight($result, 1)) $result = StringTrimRight($result, $fill) EndIf Return $result EndFunc ;==>des ; des_createKeys ; this takes as input a 64 bit key (even though only 56 bits are used) ; as an array of 2 integers, and returns 16 48 bit keys Func des_createKeys($key) ; declaring this locally speeds things up a bit Local $pc2bytes0[16] = [0, 0x4, 0x20000000, 0x20000004, 0x10000, 0x10004, 0x20010000, 0x20010004, 0x200, 0x204, 0x20000200, 0x20000204, 0x10200, 0x10204, 0x20010200, 0x20010204] Local $pc2bytes1[16] = [0, 0x1, 0x100000, 0x100001, 0x4000000, 0x4000001, 0x4100000, 0x4100001, 0x100, 0x101, 0x100100, 0x100101, 0x4000100, 0x4000101, 0x4100100, 0x4100101] Local $pc2bytes2[16] = [0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808, 0, 0x8, 0x800, 0x808, 0x1000000, 0x1000008, 0x1000800, 0x1000808] Local $pc2bytes3[16] = [0, 0x200000, 0x8000000, 0x8200000, 0x2000, 0x202000, 0x8002000, 0x8202000, 0x20000, 0x220000, 0x8020000, 0x8220000, 0x22000, 0x222000, 0x8022000, 0x8222000] Local $pc2bytes4[16] = [0, 0x40000, 0x10, 0x40010, 0, 0x40000, 0x10, 0x40010, 0x1000, 0x41000, 0x1010, 0x41010, 0x1000, 0x41000, 0x1010, 0x41010] Local $pc2bytes5[16] = [0, 0x400, 0x20, 0x420, 0, 0x400, 0x20, 0x420, 0x2000000, 0x2000400, 0x2000020, 0x2000420, 0x2000000, 0x2000400, 0x2000020, 0x2000420] Local $pc2bytes6[16] = [0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002, 0, 0x10000000, 0x80000, 0x10080000, 0x2, 0x10000002, 0x80002, 0x10080002] Local $pc2bytes7[16] = [0, 0x10000, 0x800, 0x10800, 0x20000000, 0x20010000, 0x20000800, 0x20010800, 0x20000, 0x30000, 0x20800, 0x30800, 0x20020000, 0x20030000, 0x20020800, 0x20030800] Local $pc2bytes8[16] = [0, 0x40000, 0, 0x40000, 0x2, 0x40002, 0x2, 0x40002, 0x2000000, 0x2040000, 0x2000000, 0x2040000, 0x2000002, 0x2040002, 0x2000002, 0x2040002] Local $pc2bytes9[16] = [0, 0x10000000, 0x8, 0x10000008, 0, 0x10000000, 0x8, 0x10000008, 0x400, 0x10000400, 0x408, 0x10000408, 0x400, 0x10000400, 0x408, 0x10000408] Local $pc2bytes10[16] = [0, 0x20, 0, 0x20, 0x100000, 0x100020, 0x100000, 0x100020, 0x2000, 0x2020, 0x2000, 0x2020, 0x102000, 0x102020, 0x102000, 0x102020] Local $pc2bytes11[16] = [0, 0x1000000, 0x200, 0x1000200, 0x200000, 0x1200000, 0x200200, 0x1200200, 0x4000000, 0x5000000, 0x4000200, 0x5000200, 0x4200000, 0x5200000, 0x4200200, 0x5200200] Local $pc2bytes12[16] = [0, 0x1000, 0x8000000, 0x8001000, 0x80000, 0x81000, 0x8080000, 0x8081000, 0x10, 0x1010, 0x8000010, 0x8001010, 0x80010, 0x81010, 0x8080010, 0x8081010] Local $pc2bytes13[16] = [0, 0x4, 0x100, 0x104, 0, 0x4, 0x100, 0x104, 0x1, 0x5, 0x101, 0x105, 0x1, 0x5, 0x101, 0x105] Local $masks[33] = [4294967295, 2147483647, 1073741823, 536870911, 268435455, 134217727, 67108863, 33554431, 16777215, 8388607, 4194303, 2097151, 1048575, 524287, 262143, 131071, 65535, 32767, 16383, 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0] ; how many iterations (1 for des, 3 for triple des) If StringLen($key) == 48 Then Local $iterations = 3 ElseIf StringLen($key) == 16 Then Local $iterations = 1 Else SetError(1) Return 0 EndIf ; stores the return keys Local $keys[32 * $iterations] ; now define the left shifts which need to be done Local $shifts[16] = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0] ; other variables Local $lefttemp, $righttemp, $m = 0, $n = 0, $temp For $j = 1 To $iterations ; either 1 or 3 iterations $mid = StringMid($key, $m + 1, 2) $dec = Dec($mid) $shift = BitShift($dec, -24) $left = BitOR($shift, BitShift(Dec(StringMid($key, $m + 3, 2)), -16), BitShift(Dec(StringMid($key, $m + 5, 2)), -8), Dec(StringMid($key, $m + 7, 2))) $right = BitOR(BitShift(Dec(StringMid($key, $m + 9, 2)), -24), BitShift(Dec(StringMid($key, $m + 11, 2)), -16), BitShift(Dec(StringMid($key, $m + 13, 2)), -8), Dec(StringMid($key, $m + 15, 2))) $m += 16 $temp = BitAND(BitXOR(BitAND(BitShift($left, 4), $masks[4]), $right), 0x0f0f0f0f) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -4)) $temp = BitAND(BitXOR(BitAND(BitShift($right, 16), $masks[16]), $left), 0x0000ffff) $left = BitXOR($left, $temp) $right = BitXOR($right, BitShift($temp, -16)) $temp = BitAND(BitXOR(BitAND(BitShift($left, 2), $masks[2]), $right), 0x33333333) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -2)) $temp = BitAND(BitXOR(BitAND(BitShift($right, 16), $masks[16]), $left), 0x0000ffff) $left = BitXOR($left, $temp) $right = BitXOR($right, BitShift($temp, -16)) $temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 0x55555555) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -1)) $temp = BitAND(BitXOR(BitAND(BitShift($right, 8), $masks[8]), $left), 0x00ff00ff) $left = BitXOR($left, $temp) $right = BitXOR($right, BitShift($temp, -8)) $temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 0x55555555) $right = BitXOR($right, $temp) $left = BitXOR($left, BitShift($temp, -1)) ; the right side needs to be shifted and to get the last four bits of the left side $temp = BitOR(BitShift($left, -8), BitAND(BitAND(BitShift($right, 20), $masks[20]), 0x000000f0)) ; left needs to be put upside down $left = BitOR(BitShift($right, -24), BitAND(BitShift($right, -8), 0xff0000), BitAND(BitAND(BitShift($right, 8), $masks[8]), 0xff00), BitAND(BitAND(BitShift($right, 24), $masks[24]), 0xf0)) $right = $temp ; now go through and perform these shifts on the left and right keys For $i = 0 To UBound($shifts) - 1 ; shift the keys either one or two bits to the left If $shifts[$i] == 1 Then $left = BitOR(BitShift($left, -2), BitAND(BitShift($left, 26), $masks[26])) $right = BitOR(BitShift($right, -2), BitAND(BitShift($right, 26), $masks[26])) Else $left = BitOR(BitShift($left, -1), BitAND(BitShift($left, 27), $masks[27])) $right = BitOR(BitShift($right, -1), BitAND(BitShift($right, 27), $masks[27])) EndIf $left = BitAND($left, -0xf) $right = BitAND($right, -0xf) ; now apply PC-2, in such a way that E is easier when encrypting or decrypting ; this conversion will look like PC-2 except only the last 6 bits of each byte are used ; rather than 48 consecutive bits and the order of lines will be according to ; how the S selection functions will be applied: S2, S4, S6, S8, S1, S3, S5, S7 $lefttemp = BitOR($pc2bytes0[BitAND(BitShift($left, 28), $masks[28])], $pc2bytes1[BitAND(BitAND(BitShift($left, 24), $masks[24]), 0xf)], $pc2bytes2[BitAND(BitAND(BitShift($left, 20), $masks[20]), 0xf)], $pc2bytes3[BitAND(BitAND(BitShift($left, 16), $masks[16]), 0xf)], $pc2bytes4[BitAND(BitAND(BitShift($left, 12), $masks[12]), 0xf)], $pc2bytes5[BitAND(BitAND(BitShift($left, 8), $masks[8]), 0xf)], $pc2bytes6[BitAND(BitAND(BitShift($left, 4), $masks[4]), 0xf)]) $righttemp = BitOR($pc2bytes7[BitAND(BitShift($right, 28), $masks[28])], $pc2bytes8[BitAND(BitAND(BitShift($right, 24), $masks[24]), 0xf)], $pc2bytes9[BitAND(BitAND(BitShift($right, 20), $masks[20]), 0xf)], $pc2bytes10[BitAND(BitAND(BitShift($right, 16), $masks[16]), 0xf)], $pc2bytes11[BitAND(BitAND(BitShift($right, 12), $masks[12]), 0xf)], $pc2bytes12[BitAND(BitAND(BitShift($right, 8), $masks[8]), 0xf)], $pc2bytes13[BitAND(BitAND(BitShift($right, 4), $masks[4]), 0xf)]) $temp = BitAND(BitXOR(BitAND(BitShift($righttemp, 16), $masks[16]), $lefttemp), 0x0000ffff) $keys[$n] = BitXOR($lefttemp, $temp) $keys[$n + 1] = BitXOR($righttemp, BitShift($temp, -16)) $n += 2 Next Next ; for each iterations ; return the keys we've created Return $keys EndFunc ;==>des_createKeys Func stringToHex($s) Dim $result = "0x" Dim $temp = StringSplit($s, "") For $i = 1 To $temp[0] $result &= Hex(Asc($temp[$i]), 2) Next Return $result EndFunc ;==>stringToHex
Danach:
PHP Code:
$temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -1))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -1))")
ConsoleWrite("New Value of $left: " & $left)
Code:
$timer = TimerInit()
ConsoleWrite("Executed assignment: $timer = TimerInit()")
ConsoleWrite("New Value of $timer: " & $timer)
For $lol = 0 To 1337
Local $key = "8787878787878787"
Local $message = "Supercalifradialisticexpialidocious"
Local $ciphertext = des($key, $message, 1)
Local $recovered_message = des($key, $ciphertext, 0)
Next
$diff = TimerDiff($timer)
ConsoleWrite("Executed assignment: $diff = TimerDiff($timer)")
ConsoleWrite("New Value of $diff: " & $diff)
ConsoleWrite($diff)
Sleep(10000)
Exit $diff
Func des($key, $message, $encrypt, $mode = 0, $iv = "")
Local $spfunction1[64] = [16843776, 0, 65536, 16843780, 16842756, 66564, 4, 65536, 1024, 16843776, 16843780, 1024, 16778244, 16842756, 16777216, 4, 1028, 16778240, 16778240, 66560, 66560, 16842752, 16842752, 16778244, 65540, 16777220, 16777220, 65540, 0, 1028, 66564, 16777216, 65536, 16843780, 4, 16842752, 16843776, 16777216, 16777216, 1024, 16842756, 65536, 66560, 16777220, 1024, 4, 16778244, 66564, 16843780, 65540, 16842752, 16778244, 16777220, 1028, 66564, 16843776, 1028, 16778240, 16778240, 0, 65540, 66560, 0, 16842756]
Local $spfunction2[64] = [-2146402272, -2147450880, 32768, 1081376, 1048576, 32, -2146435040, -2147450848, -2147483616, -2146402272, -2146402304, - -2147483648, -2147450880, 1048576, 32, -2146435040, 1081344, 1048608, -2147450848, 0, - -2147483648, 32768, 1081376, -2146435072, 1048608, -2147483616, 0, 1081344, 32800, -2146402304, -2146435072, 32800, 0, 1081376, -2146435040, 1048576, -2147450848, -2146435072, -2146402304, 32768, -2146435072, -2147450880, 32, -2146402272, 1081376, 32, 32768, - -2147483648, 32800, -2146402304, 1048576, -2147483616, 1048608, -2147450848, -2147483616, 1048608, 1081344, 0, -2147450880, 32800, - -2147483648, -2146435040, -2146402272, 1081344]
Local $spfunction3[64] = [520, 134349312, 0, 134348808, 134218240, 0, 131592, 134218240, 131080, 134217736, 134217736, 131072, 134349320, 131080, 134348800, 520, 134217728, 8, 134349312, 512, 131584, 134348800, 134348808, 131592, 134218248, 131584, 131072, 134218248, 8, 134349320, 512, 134217728, 134349312, 134217728, 131080, 520, 131072, 134349312, 134218240, 0, 512, 131080, 134349320, 134218240, 134217736, 512, 0, 134348808, 134218248, 131072, 134217728, 134349320, 8, 131592, 131584, 134217736, 134348800, 134218248, 520, 134348800, 131592, 8, 134348808, 131584]
Local $spfunction4[64] = [8396801, 8321, 8321, 128, 8396928, 8388737, 8388609, 8193, 0, 8396800, 8396800, 8396929, 129, 0, 8388736, 8388609, 1, 8192, 8388608, 8396801, 128, 8388608, 8193, 8320, 8388737, 1, 8320, 8388736, 8192, 8396928, 8396929, 129, 8388736, 8388609, 8396800, 8396929, 129, 0, 0, 8396800, 8320, 8388736, 8388737, 1, 8396801, 8321, 8321, 128, 8396929, 129, 1, 8192, 8388609, 8193, 8396928, 8388737, 8193, 8320, 8388608, 8396801, 128, 8388608, 8192, 8396928]
Local $spfunction5[64] = [256, 34078976, 34078720, 1107296512, 524288, 256, 1073741824, 34078720, 1074266368, 524288, 33554688, 1074266368, 1107296512, 1107820544, 524544, 1073741824, 33554432, 1074266112, 1074266112, 0, 1073742080, 1107820800, 1107820800, 33554688, 1107820544, 1073742080, 0, 1107296256, 34078976, 33554432, 1107296256, 524544, 524288, 1107296512, 256, 33554432, 1073741824, 34078720, 1107296512, 1074266368, 33554688, 1073741824, 1107820544, 34078976, 1074266368, 256, 33554432, 1107820544, 1107820800, 524544, 1107296256, 1107820800, 34078720, 0, 1074266112, 1107296256, 524544, 33554688, 1073742080, 524288, 0, 1074266112, 34078976, 1073742080]
Local $spfunction6[64] = [536870928, 541065216, 16384, 541081616, 541065216, 16, 541081616, 4194304, 536887296, 4210704, 4194304, 536870928, 4194320, 536887296, 536870912, 16400, 0, 4194320, 536887312, 16384, 4210688, 536887312, 16, 541065232, 541065232, 0, 4210704, 541081600, 16400, 4210688, 541081600, 536870912, 536887296, 16, 541065232, 4210688, 541081616, 4194304, 16400, 536870928, 4194304, 536887296, 536870912, 16400, 536870928, 541081616, 4210688, 541065216, 4210704, 541081600, 0, 541065232, 16, 16384, 541065216, 4210704, 16384, 4194320, 536887312, 0, 541081600, 536870912, 4194320, 536887312]
Local $spfunction7[64] = [2097152, 69206018, 67110914, 0, 2048, 67110914, 2099202, 69208064, 69208066, 2097152, 0, 67108866, 2, 67108864, 69206018, 2050, 67110912, 2099202, 2097154, 67110912, 67108866, 69206016, 69208064, 2097154, 69206016, 2048, 2050, 69208066, 2099200, 2, 67108864, 2099200, 67108864, 2099200, 2097152, 67110914, 67110914, 69206018, 69206018, 2, 2097154, 67108864, 67110912, 2097152, 69208064, 2050, 2099202, 69208064, 2050, 67108866, 69208066, 69206016, 2099200, 0, 2, 69208066, 0, 2099202, 69206016, 2048, 67108866, 67110912, 2048, 2097154]
Local $spfunction8[64] = [268439616, 4096, 262144, 268701760, 268435456, 268439616, 64, 268435456, 262208, 268697600, 268701760, 266240, 268701696, 266304, 4096, 64, 268697600, 268435520, 268439552, 4160, 266240, 262208, 268697664, 268701696, 4160, 0, 0, 268697664, 268435520, 268439552, 266304, 262144, 266304, 262144, 268701696, 4096, 64, 268697664, 4096, 266304, 268439552, 64, 268435520, 268697600, 268697664, 268435456, 262144, 268439616, 0, 268701760, 262208, 268435520, 268697600, 268439552, 268439616, 0, 268701760, 266240, 266240, 4160, 4160, 262208, 268435456, 268701696]
Local $masks[33] = [4294967295, 2147483647, 1073741823, 536870911, 268435455, 134217727, 67108863, 33554431, 16777215, 8388607, 4194303, 2097151, 1048575, 524287, 262143, 131071, 65535, 32767, 16383, 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0]
Local $fill
$keys = des_createKeys($key)
ConsoleWrite("Executed assignment: $keys = des_createKeys($key)")
ConsoleWrite("New Value of $keys: " & $keys)
If @error == 1 Then
SetError(-1)
Return 0
EndIf
$m = 0
ConsoleWrite("Executed assignment: $m = 0")
ConsoleWrite("New Value of $m: " & $m)
$chunk = 0
ConsoleWrite("Executed assignment: $chunk = 0")
ConsoleWrite("New Value of $chunk: " & $chunk)
If UBound($keys) == 32 Then
Local $iterations = 3
Else
Local $iterations = 9
EndIf
If $iterations == 3 Then
If $encrypt == 1 Then
Local $looping[3] = [0, 32, 2]
Else
Local $looping[3] = [30, -2, -2]
EndIf
Else
If $encrypt == 1 Then
Local $looping[9] = [0, 32, 2, 62, 30, -2, 64, 96, 2]
Else
Local $looping[9] = [94, 62, -2, 32, 64, 2, 30, -2, -2]
EndIf
EndIf
If $encrypt == 1 Then
$fill = 8
ConsoleWrite("Executed assignment: $fill = 8")
ConsoleWrite("New Value of $fill: " & $fill)
If Mod(StringLen($message), 8) <> 0 Then
$fill = 8 - Mod(StringLen($message), 8)
ConsoleWrite("Executed assignment: $fill = 8 - Mod(StringLen($message), 8)")
ConsoleWrite("New Value of $fill: " & $fill)
EndIf
For $i = 1 To $fill
$message &= Chr($fill)
ConsoleWrite("Executed assignment: $message &= Chr($fill)")
ConsoleWrite("New Value of $message: " & $message)
Next
EndIf
$len = StringLen($message)
ConsoleWrite("Executed assignment: $len = StringLen($message)")
ConsoleWrite("New Value of $len: " & $len)
$result = ""
ConsoleWrite('Executed assignment: $result = ""')
ConsoleWrite("New Value of $result: " & $result)
$tempresult = ""
ConsoleWrite('Executed assignment: $tempresult = ""')
ConsoleWrite("New Value of $tempresult: " & $tempresult)
If $mode == 1 Then
$cbcleft = BitOR(BitShift(Asc(StringMid($iv, 1, 1)), -24), BitShift(Asc(StringMid($iv, 2, 1)), -16), BitShift(Asc(StringMid($iv, 3, 1)), -8), Asc(StringMid($iv, 4, 1)))
ConsoleWrite("Executed assignment: $cbcleft = BitOR(BitShift(Asc(StringMid($iv, 1, 1)), -24), BitShift(Asc(StringMid($iv, 2, 1)), -16), BitShift(Asc(StringMid($iv, 3, 1)), -8), Asc(StringMid($iv, 4, 1)))")
ConsoleWrite("New Value of $cbcleft: " & $cbcleft)
$cbcright = BitOR(BitShift(Asc(StringMid($iv, 5, 1)), -24), BitShift(Asc(StringMid($iv, 6, 1)), -16), BitShift(Asc(StringMid($iv, 7, 1)), -8), Asc(StringMid($iv, 8, 1)))
ConsoleWrite("Executed assignment: $cbcright = BitOR(BitShift(Asc(StringMid($iv, 5, 1)), -24), BitShift(Asc(StringMid($iv, 6, 1)), -16), BitShift(Asc(StringMid($iv, 7, 1)), -8), Asc(StringMid($iv, 8, 1)))")
ConsoleWrite("New Value of $cbcright: " & $cbcright)
EndIf
While $m < $len
$left = BitOR(BitShift(Asc(StringMid($message, $m + 1, 1)), -24), BitShift(Asc(StringMid($message, $m + 2, 1)), -16), BitShift(Asc(StringMid($message, $m + 3, 1)), -8), Asc(StringMid($message, $m + 4, 1)))
ConsoleWrite("Executed assignment: $left = BitOR(BitShift(Asc(StringMid($message, $m + 1, 1)), -24), BitShift(Asc(StringMid($message, $m + 2, 1)), -16), BitShift(Asc(StringMid($message, $m + 3, 1)), -8), Asc(StringMid($message, $m + 4, 1)))")
ConsoleWrite("New Value of $left: " & $left)
$right = BitOR(BitShift(Asc(StringMid($message, $m + 5, 1)), -24), BitShift(Asc(StringMid($message, $m + 6, 1)), -16), BitShift(Asc(StringMid($message, $m + 7, 1)), -8), Asc(StringMid($message, $m + 8, 1)))
ConsoleWrite("Executed assignment: $right = BitOR(BitShift(Asc(StringMid($message, $m + 5, 1)), -24), BitShift(Asc(StringMid($message, $m + 6, 1)), -16), BitShift(Asc(StringMid($message, $m + 7, 1)), -8), Asc(StringMid($message, $m + 8, 1)))")
ConsoleWrite("New Value of $right: " & $right)
$m += 8
ConsoleWrite("Executed assignment: $m += 8")
ConsoleWrite("New Value of $m: " & $m)
If $mode == 1 Then
If $encrypt Then
$left = BitXOR($left, $cbcleft)
ConsoleWrite("Executed assignment: $left = BitXOR($left, $cbcleft)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($right, $cbcright)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $cbcright)")
ConsoleWrite("New Value of $right: " & $right)
Else
$cbcleft2 = $cbcleft
ConsoleWrite("Executed assignment: $cbcleft2 = $cbcleft")
ConsoleWrite("New Value of $cbcleft2: " & $cbcleft2)
$cbcright2 = $cbcright
ConsoleWrite("Executed assignment: $cbcright2 = $cbcright")
ConsoleWrite("New Value of $cbcright2: " & $cbcright2)
$cbcleft = $left
ConsoleWrite("Executed assignment: $cbcleft = $left")
ConsoleWrite("New Value of $cbcleft: " & $cbcleft)
$cbcright = $right
ConsoleWrite("Executed assignment: $cbcright = $right")
ConsoleWrite("New Value of $cbcright: " & $cbcright)
EndIf
EndIf
$temp = BitAND(BitXOR(BitAND(BitShift($left, 4), $masks[4]), $right), 252645135)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 4), $masks[4]), $right), 252645135)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -4))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -4))")
ConsoleWrite("New Value of $left: " & $left)
$temp = BitAND(BitXOR(BitAND(BitShift($left, 16), $masks[16]), $right), 65535)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 16), $masks[16]), $right), 65535)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -16))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -16))")
ConsoleWrite("New Value of $left: " & $left)
$temp = BitAND(BitXOR(BitAND(BitShift($right, 2), $masks[2]), $left), 858993459)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($right, 2), $masks[2]), $left), 858993459)")
ConsoleWrite("New Value of $temp: " & $temp)
$left = BitXOR($left, $temp)
ConsoleWrite("Executed assignment: $left = BitXOR($left, $temp)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($right, BitShift($temp, -2))
ConsoleWrite("Executed assignment: $right = BitXOR($right, BitShift($temp, -2))")
ConsoleWrite("New Value of $right: " & $right)
$temp = BitAND(BitXOR(BitAND(BitShift($right, 8), $masks[8]), $left), 16711935)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($right, 8), $masks[8]), $left), 16711935)")
ConsoleWrite("New Value of $temp: " & $temp)
$left = BitXOR($left, $temp)
ConsoleWrite("Executed assignment: $left = BitXOR($left, $temp)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($right, BitShift($temp, -8))
ConsoleWrite("Executed assignment: $right = BitXOR($right, BitShift($temp, -8))")
ConsoleWrite("New Value of $right: " & $right)
$temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -1))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -1))")
ConsoleWrite("New Value of $left: " & $left)
$left = BitOR(BitShift($left, -1), BitAND(BitShift($left, 31), $masks[31]))
ConsoleWrite("Executed assignment: $left = BitOR(BitShift($left, -1), BitAND(BitShift($left, 31), $masks[31]))")
ConsoleWrite("New Value of $left: " & $left)
$right = BitOR(BitShift($right, -1), BitAND(BitShift($right, 31), $masks[31]))
ConsoleWrite("Executed assignment: $right = BitOR(BitShift($right, -1), BitAND(BitShift($right, 31), $masks[31]))")
ConsoleWrite("New Value of $right: " & $right)
For $j = 0 To $iterations - 1 Step 3
$endloop = $looping[$j + 1]
ConsoleWrite("Executed assignment: $endloop = $looping[$j + 1]")
ConsoleWrite("New Value of $endloop: " & $endloop)
$loopinc = $looping[$j + 2]
ConsoleWrite("Executed assignment: $loopinc = $looping[$j + 2]")
ConsoleWrite("New Value of $loopinc: " & $loopinc)
$i = $looping[$j]
ConsoleWrite("Executed assignment: $i = $looping[$j]")
ConsoleWrite("New Value of $i: " & $i)
While $i <> $endloop
$right1 = BitXOR($right, $keys[$i])
ConsoleWrite("Executed assignment: $right1 = BitXOR($right, $keys[$i])")
ConsoleWrite("New Value of $right1: " & $right1)
$right2 = BitXOR(BitOR(BitAND(BitShift($right, 4), $masks[4]), BitShift($right, -28)), $keys[$i + 1])
ConsoleWrite("Executed assignment: $right2 = BitXOR(BitOR(BitAND(BitShift($right, 4), $masks[4]), BitShift($right, -28)), $keys[$i + 1])")
ConsoleWrite("New Value of $right2: " & $right2)
$temp = $left
ConsoleWrite("Executed assignment: $temp = $left")
ConsoleWrite("New Value of $temp: " & $temp)
$left = $right
ConsoleWrite("Executed assignment: $left = $right")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($temp, BitOR($spfunction2[BitAND(BitAND(BitShift($right1, 24), $masks[24]), 63)], $spfunction4[BitAND(BitAND(BitShift($right1, 16), $masks[16]), 63)], $spfunction6[BitAND(BitAND(BitShift($right1, 8), $masks[8]), 63)], $spfunction8[BitAND($right1, 63)], $spfunction1[BitAND(BitAND(BitShift($right2, 24), $masks[24]), 63)], $spfunction3[BitAND(BitAND(BitShift($right2, 16), $masks[16]), 63)], $spfunction5[BitAND(BitAND(BitShift($right2, 8), $masks[8]), 63)], $spfunction7[BitAND($right2, 63)]))
ConsoleWrite("Executed assignment: $right = BitXOR($temp, BitOR($spfunction2[BitAND(BitAND(BitShift($right1, 24), $masks[24]), 63)], $spfunction4[BitAND(BitAND(BitShift($right1, 16), $masks[16]), 63)], $spfunction6[BitAND(BitAND(BitShift($right1, 8), $masks[8]), 63)], $spfunction8[BitAND($right1, 63)], $spfunction1[BitAND(BitAND(BitShift($right2, 24), $masks[24]), 63)], $spfunction3[BitAND(BitAND(BitShift($right2, 16), $masks[16]), 63)], $spfunction5[BitAND(BitAND(BitShift($right2, 8), $masks[8]), 63)], $spfunction7[BitAND($right2, 63)]))")
ConsoleWrite("New Value of $right: " & $right)
$i += $loopinc
ConsoleWrite("Executed assignment: $i += $loopinc")
ConsoleWrite("New Value of $i: " & $i)
WEnd
$temp = $left
ConsoleWrite("Executed assignment: $temp = $left")
ConsoleWrite("New Value of $temp: " & $temp)
$left = $right
ConsoleWrite("Executed assignment: $left = $right")
ConsoleWrite("New Value of $left: " & $left)
$right = $temp
ConsoleWrite("Executed assignment: $right = $temp")
ConsoleWrite("New Value of $right: " & $right)
Next
$left = BitOR(BitAND(BitShift($left, 1), $masks[1]), BitShift($left, -31))
ConsoleWrite("Executed assignment: $left = BitOR(BitAND(BitShift($left, 1), $masks[1]), BitShift($left, -31))")
ConsoleWrite("New Value of $left: " & $left)
$right = BitOR(BitAND(BitShift($right, 1), $masks[1]), BitShift($right, -31))
ConsoleWrite("Executed assignment: $right = BitOR(BitAND(BitShift($right, 1), $masks[1]), BitShift($right, -31))")
ConsoleWrite("New Value of $right: " & $right)
$temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -1))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -1))")
ConsoleWrite("New Value of $left: " & $left)
$temp = BitAND(BitXOR(BitAND(BitShift($right, 8), $masks[8]), $left), 16711935)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($right, 8), $masks[8]), $left), 16711935)")
ConsoleWrite("New Value of $temp: " & $temp)
$left = BitXOR($left, $temp)
ConsoleWrite("Executed assignment: $left = BitXOR($left, $temp)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($right, BitShift($temp, -8))
ConsoleWrite("Executed assignment: $right = BitXOR($right, BitShift($temp, -8))")
ConsoleWrite("New Value of $right: " & $right)
$temp = BitAND(BitXOR(BitAND(BitShift($right, 2), $masks[2]), $left), 858993459)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($right, 2), $masks[2]), $left), 858993459)")
ConsoleWrite("New Value of $temp: " & $temp)
$left = BitXOR($left, $temp)
ConsoleWrite("Executed assignment: $left = BitXOR($left, $temp)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($right, BitShift($temp, -2))
ConsoleWrite("Executed assignment: $right = BitXOR($right, BitShift($temp, -2))")
ConsoleWrite("New Value of $right: " & $right)
$temp = BitAND(BitXOR(BitAND(BitShift($left, 16), $masks[16]), $right), 65535)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 16), $masks[16]), $right), 65535)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -16))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -16))")
ConsoleWrite("New Value of $left: " & $left)
$temp = BitAND(BitXOR(BitAND(BitShift($left, 4), $masks[4]), $right), 252645135)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 4), $masks[4]), $right), 252645135)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -4))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -4))")
ConsoleWrite("New Value of $left: " & $left)
If $mode == 1 Then
If $encrypt == 1 Then
$cbcleft = $left
ConsoleWrite("Executed assignment: $cbcleft = $left")
ConsoleWrite("New Value of $cbcleft: " & $cbcleft)
$cbcright = $right
ConsoleWrite("Executed assignment: $cbcright = $right")
ConsoleWrite("New Value of $cbcright: " & $cbcright)
Else
$left = BitXOR($left, $cbcleft2)
ConsoleWrite("Executed assignment: $left = BitXOR($left, $cbcleft2)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($right, $cbcright2)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $cbcright2)")
ConsoleWrite("New Value of $right: " & $right)
EndIf
EndIf
$tempresult &= Chr(BitAND(BitShift($left, 24), $masks[24]))
ConsoleWrite("Executed assignment: $tempresult &= Chr(BitAND(BitShift($left, 24), $masks[24]))")
ConsoleWrite("New Value of $tempresult: " & $tempresult)
$tempresult &= Chr(BitAND(BitAND(BitShift($left, 16), $masks[16]), 255))
ConsoleWrite("Executed assignment: $tempresult &= Chr(BitAND(BitAND(BitShift($left, 16), $masks[16]), 255))")
ConsoleWrite("New Value of $tempresult: " & $tempresult)
$tempresult &= Chr(BitAND(BitAND(BitShift($left, 8), $masks[8]), 255))
ConsoleWrite("Executed assignment: $tempresult &= Chr(BitAND(BitAND(BitShift($left, 8), $masks[8]), 255))")
ConsoleWrite("New Value of $tempresult: " & $tempresult)
$tempresult &= Chr(BitAND($left, 255))
ConsoleWrite("Executed assignment: $tempresult &= Chr(BitAND($left, 255))")
ConsoleWrite("New Value of $tempresult: " & $tempresult)
$tempresult &= Chr(BitAND(BitShift($right, 24), $masks[24]))
ConsoleWrite("Executed assignment: $tempresult &= Chr(BitAND(BitShift($right, 24), $masks[24]))")
ConsoleWrite("New Value of $tempresult: " & $tempresult)
$tempresult &= Chr(BitAND(BitAND(BitShift($right, 16), $masks[16]), 255))
ConsoleWrite("Executed assignment: $tempresult &= Chr(BitAND(BitAND(BitShift($right, 16), $masks[16]), 255))")
ConsoleWrite("New Value of $tempresult: " & $tempresult)
$tempresult &= Chr(BitAND(BitAND(BitShift($right, 8), $masks[8]), 255))
ConsoleWrite("Executed assignment: $tempresult &= Chr(BitAND(BitAND(BitShift($right, 8), $masks[8]), 255))")
ConsoleWrite("New Value of $tempresult: " & $tempresult)
$tempresult &= Chr(BitAND($right, 255))
ConsoleWrite("Executed assignment: $tempresult &= Chr(BitAND($right, 255))")
ConsoleWrite("New Value of $tempresult: " & $tempresult)
$chunk += 8
ConsoleWrite("Executed assignment: $chunk += 8")
ConsoleWrite("New Value of $chunk: " & $chunk)
If $chunk == 512 Then
$result &= $tempresult
ConsoleWrite("Executed assignment: $result &= $tempresult")
ConsoleWrite("New Value of $result: " & $result)
$tempresult = ""
ConsoleWrite('Executed assignment: $tempresult = ""')
ConsoleWrite("New Value of $tempresult: " & $tempresult)
$chunk = 0
ConsoleWrite("Executed assignment: $chunk = 0")
ConsoleWrite("New Value of $chunk: " & $chunk)
EndIf
WEnd
$result &= $tempresult
ConsoleWrite("Executed assignment: $result &= $tempresult")
ConsoleWrite("New Value of $result: " & $result)
If $encrypt == 0 Then
$fill = Asc(StringRight($result, 1))
ConsoleWrite("Executed assignment: $fill = Asc(StringRight($result, 1))")
ConsoleWrite("New Value of $fill: " & $fill)
$result = StringTrimRight($result, $fill)
ConsoleWrite("Executed assignment: $result = StringTrimRight($result, $fill)")
ConsoleWrite("New Value of $result: " & $result)
EndIf
Return $result
EndFunc ;==>des
Func des_createKeys($key)
Local $pc2bytes0[16] = [0, 4, 536870912, 536870916, 65536, 65540, 536936448, 536936452, 512, 516, 536871424, 536871428, 66048, 66052, 536936960, 536936964]
Local $pc2bytes1[16] = [0, 1, 1048576, 1048577, 67108864, 67108865, 68157440, 68157441, 256, 257, 1048832, 1048833, 67109120, 67109121, 68157696, 68157697]
Local $pc2bytes2[16] = [0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272, 0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272]
Local $pc2bytes3[16] = [0, 2097152, 134217728, 136314880, 8192, 2105344, 134225920, 136323072, 131072, 2228224, 134348800, 136445952, 139264, 2236416, 134356992, 136454144]
Local $pc2bytes4[16] = [0, 262144, 16, 262160, 0, 262144, 16, 262160, 4096, 266240, 4112, 266256, 4096, 266240, 4112, 266256]
Local $pc2bytes5[16] = [0, 1024, 32, 1056, 0, 1024, 32, 1056, 33554432, 33555456, 33554464, 33555488, 33554432, 33555456, 33554464, 33555488]
Local $pc2bytes6[16] = [0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746, 0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746]
Local $pc2bytes7[16] = [0, 65536, 2048, 67584, 536870912, 536936448, 536872960, 536938496, 131072, 196608, 133120, 198656, 537001984, 537067520, 537004032, 537069568]
Local $pc2bytes8[16] = [0, 262144, 0, 262144, 2, 262146, 2, 262146, 33554432, 33816576, 33554432, 33816576, 33554434, 33816578, 33554434, 33816578]
Local $pc2bytes9[16] = [0, 268435456, 8, 268435464, 0, 268435456, 8, 268435464, 1024, 268436480, 1032, 268436488, 1024, 268436480, 1032, 268436488]
Local $pc2bytes10[16] = [0, 32, 0, 32, 1048576, 1048608, 1048576, 1048608, 8192, 8224, 8192, 8224, 1056768, 1056800, 1056768, 1056800]
Local $pc2bytes11[16] = [0, 16777216, 512, 16777728, 2097152, 18874368, 2097664, 18874880, 67108864, 83886080, 67109376, 83886592, 69206016, 85983232, 69206528, 85983744]
Local $pc2bytes12[16] = [0, 4096, 134217728, 134221824, 524288, 528384, 134742016, 134746112, 16, 4112, 134217744, 134221840, 524304, 528400, 134742032, 134746128]
Local $pc2bytes13[16] = [0, 4, 256, 260, 0, 4, 256, 260, 1, 5, 257, 261, 1, 5, 257, 261]
Local $masks[33] = [4294967295, 2147483647, 1073741823, 536870911, 268435455, 134217727, 67108863, 33554431, 16777215, 8388607, 4194303, 2097151, 1048575, 524287, 262143, 131071, 65535, 32767, 16383, 8191, 4095, 2047, 1023, 511, 255, 127, 63, 31, 15, 7, 3, 1, 0]
If StringLen($key) == 48 Then
Local $iterations = 3
ElseIf StringLen($key) == 16 Then
Local $iterations = 1
Else
SetError(1)
Return 0
EndIf
Local $keys[32 * $iterations]
Local $shifts[16] = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]
Local $lefttemp
Local $righttemp
Local $m = 0
Local $n = 0
Local $temp
For $j = 1 To $iterations
$mid = StringMid($key, $m + 1, 2)
ConsoleWrite("Executed assignment: $mid = StringMid($key, $m + 1, 2)")
ConsoleWrite("New Value of $mid: " & $mid)
$dec = Dec($mid)
ConsoleWrite("Executed assignment: $dec = Dec($mid)")
ConsoleWrite("New Value of $dec: " & $dec)
$shift = BitShift($dec, -24)
ConsoleWrite("Executed assignment: $shift = BitShift($dec, -24)")
ConsoleWrite("New Value of $shift: " & $shift)
$left = BitOR($shift, BitShift(Dec(StringMid($key, $m + 3, 2)), -16), BitShift(Dec(StringMid($key, $m + 5, 2)), -8), Dec(StringMid($key, $m + 7, 2)))
ConsoleWrite("Executed assignment: $left = BitOR($shift, BitShift(Dec(StringMid($key, $m + 3, 2)), -16), BitShift(Dec(StringMid($key, $m + 5, 2)), -8), Dec(StringMid($key, $m + 7, 2)))")
ConsoleWrite("New Value of $left: " & $left)
$right = BitOR(BitShift(Dec(StringMid($key, $m + 9, 2)), -24), BitShift(Dec(StringMid($key, $m + 11, 2)), -16), BitShift(Dec(StringMid($key, $m + 13, 2)), -8), Dec(StringMid($key, $m + 15, 2)))
ConsoleWrite("Executed assignment: $right = BitOR(BitShift(Dec(StringMid($key, $m + 9, 2)), -24), BitShift(Dec(StringMid($key, $m + 11, 2)), -16), BitShift(Dec(StringMid($key, $m + 13, 2)), -8), Dec(StringMid($key, $m + 15, 2)))")
ConsoleWrite("New Value of $right: " & $right)
$m += 16
ConsoleWrite("Executed assignment: $m += 16")
ConsoleWrite("New Value of $m: " & $m)
$temp = BitAND(BitXOR(BitAND(BitShift($left, 4), $masks[4]), $right), 252645135)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 4), $masks[4]), $right), 252645135)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -4))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -4))")
ConsoleWrite("New Value of $left: " & $left)
$temp = BitAND(BitXOR(BitAND(BitShift($right, 16), $masks[16]), $left), 65535)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($right, 16), $masks[16]), $left), 65535)")
ConsoleWrite("New Value of $temp: " & $temp)
$left = BitXOR($left, $temp)
ConsoleWrite("Executed assignment: $left = BitXOR($left, $temp)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($right, BitShift($temp, -16))
ConsoleWrite("Executed assignment: $right = BitXOR($right, BitShift($temp, -16))")
ConsoleWrite("New Value of $right: " & $right)
$temp = BitAND(BitXOR(BitAND(BitShift($left, 2), $masks[2]), $right), 858993459)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 2), $masks[2]), $right), 858993459)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -2))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -2))")
ConsoleWrite("New Value of $left: " & $left)
$temp = BitAND(BitXOR(BitAND(BitShift($right, 16), $masks[16]), $left), 65535)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($right, 16), $masks[16]), $left), 65535)")
ConsoleWrite("New Value of $temp: " & $temp)
$left = BitXOR($left, $temp)
ConsoleWrite("Executed assignment: $left = BitXOR($left, $temp)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($right, BitShift($temp, -16))
ConsoleWrite("Executed assignment: $right = BitXOR($right, BitShift($temp, -16))")
ConsoleWrite("New Value of $right: " & $right)
$temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -1))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -1))")
ConsoleWrite("New Value of $left: " & $left)
$temp = BitAND(BitXOR(BitAND(BitShift($right, 8), $masks[8]), $left), 16711935)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($right, 8), $masks[8]), $left), 16711935)")
ConsoleWrite("New Value of $temp: " & $temp)
$left = BitXOR($left, $temp)
ConsoleWrite("Executed assignment: $left = BitXOR($left, $temp)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitXOR($right, BitShift($temp, -8))
ConsoleWrite("Executed assignment: $right = BitXOR($right, BitShift($temp, -8))")
ConsoleWrite("New Value of $right: " & $right)
$temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($left, 1), $masks[1]), $right), 1431655765)")
ConsoleWrite("New Value of $temp: " & $temp)
$right = BitXOR($right, $temp)
ConsoleWrite("Executed assignment: $right = BitXOR($right, $temp)")
ConsoleWrite("New Value of $right: " & $right)
$left = BitXOR($left, BitShift($temp, -1))
ConsoleWrite("Executed assignment: $left = BitXOR($left, BitShift($temp, -1))")
ConsoleWrite("New Value of $left: " & $left)
$temp = BitOR(BitShift($left, -8), BitAND(BitAND(BitShift($right, 20), $masks[20]), 240))
ConsoleWrite("Executed assignment: $temp = BitOR(BitShift($left, -8), BitAND(BitAND(BitShift($right, 20), $masks[20]), 240))")
ConsoleWrite("New Value of $temp: " & $temp)
$left = BitOR(BitShift($right, -24), BitAND(BitShift($right, -8), 16711680), BitAND(BitAND(BitShift($right, 8), $masks[8]), 65280), BitAND(BitAND(BitShift($right, 24), $masks[24]), 240))
ConsoleWrite("Executed assignment: $left = BitOR(BitShift($right, -24), BitAND(BitShift($right, -8), 16711680), BitAND(BitAND(BitShift($right, 8), $masks[8]), 65280), BitAND(BitAND(BitShift($right, 24), $masks[24]), 240))")
ConsoleWrite("New Value of $left: " & $left)
$right = $temp
ConsoleWrite("Executed assignment: $right = $temp")
ConsoleWrite("New Value of $right: " & $right)
For $i = 0 To UBound($shifts) - 1
If $shifts[$i] == 1 Then
$left = BitOR(BitShift($left, -2), BitAND(BitShift($left, 26), $masks[26]))
ConsoleWrite("Executed assignment: $left = BitOR(BitShift($left, -2), BitAND(BitShift($left, 26), $masks[26]))")
ConsoleWrite("New Value of $left: " & $left)
$right = BitOR(BitShift($right, -2), BitAND(BitShift($right, 26), $masks[26]))
ConsoleWrite("Executed assignment: $right = BitOR(BitShift($right, -2), BitAND(BitShift($right, 26), $masks[26]))")
ConsoleWrite("New Value of $right: " & $right)
Else
$left = BitOR(BitShift($left, -1), BitAND(BitShift($left, 27), $masks[27]))
ConsoleWrite("Executed assignment: $left = BitOR(BitShift($left, -1), BitAND(BitShift($left, 27), $masks[27]))")
ConsoleWrite("New Value of $left: " & $left)
$right = BitOR(BitShift($right, -1), BitAND(BitShift($right, 27), $masks[27]))
ConsoleWrite("Executed assignment: $right = BitOR(BitShift($right, -1), BitAND(BitShift($right, 27), $masks[27]))")
ConsoleWrite("New Value of $right: " & $right)
EndIf
$left = BitAND($left, -15)
ConsoleWrite("Executed assignment: $left = BitAND($left, -15)")
ConsoleWrite("New Value of $left: " & $left)
$right = BitAND($right, -15)
ConsoleWrite("Executed assignment: $right = BitAND($right, -15)")
ConsoleWrite("New Value of $right: " & $right)
$lefttemp = BitOR($pc2bytes0[BitAND(BitShift($left, 28), $masks[28])], $pc2bytes1[BitAND(BitAND(BitShift($left, 24), $masks[24]), 15)], $pc2bytes2[BitAND(BitAND(BitShift($left, 20), $masks[20]), 15)], $pc2bytes3[BitAND(BitAND(BitShift($left, 16), $masks[16]), 15)], $pc2bytes4[BitAND(BitAND(BitShift($left, 12), $masks[12]), 15)], $pc2bytes5[BitAND(BitAND(BitShift($left, 8), $masks[8]), 15)], $pc2bytes6[BitAND(BitAND(BitShift($left, 4), $masks[4]), 15)])
ConsoleWrite("Executed assignment: $lefttemp = BitOR($pc2bytes0[BitAND(BitShift($left, 28), $masks[28])], $pc2bytes1[BitAND(BitAND(BitShift($left, 24), $masks[24]), 15)], $pc2bytes2[BitAND(BitAND(BitShift($left, 20), $masks[20]), 15)], $pc2bytes3[BitAND(BitAND(BitShift($left, 16), $masks[16]), 15)], $pc2bytes4[BitAND(BitAND(BitShift($left, 12), $masks[12]), 15)], $pc2bytes5[BitAND(BitAND(BitShift($left, 8), $masks[8]), 15)], $pc2bytes6[BitAND(BitAND(BitShift($left, 4), $masks[4]), 15)])")
ConsoleWrite("New Value of $lefttemp: " & $lefttemp)
$righttemp = BitOR($pc2bytes7[BitAND(BitShift($right, 28), $masks[28])], $pc2bytes8[BitAND(BitAND(BitShift($right, 24), $masks[24]), 15)], $pc2bytes9[BitAND(BitAND(BitShift($right, 20), $masks[20]), 15)], $pc2bytes10[BitAND(BitAND(BitShift($right, 16), $masks[16]), 15)], $pc2bytes11[BitAND(BitAND(BitShift($right, 12), $masks[12]), 15)], $pc2bytes12[BitAND(BitAND(BitShift($right, 8), $masks[8]), 15)], $pc2bytes13[BitAND(BitAND(BitShift($right, 4), $masks[4]), 15)])
ConsoleWrite("Executed assignment: $righttemp = BitOR($pc2bytes7[BitAND(BitShift($right, 28), $masks[28])], $pc2bytes8[BitAND(BitAND(BitShift($right, 24), $masks[24]), 15)], $pc2bytes9[BitAND(BitAND(BitShift($right, 20), $masks[20]), 15)], $pc2bytes10[BitAND(BitAND(BitShift($right, 16), $masks[16]), 15)], $pc2bytes11[BitAND(BitAND(BitShift($right, 12), $masks[12]), 15)], $pc2bytes12[BitAND(BitAND(BitShift($right, 8), $masks[8]), 15)], $pc2bytes13[BitAND(BitAND(BitShift($right, 4), $masks[4]), 15)])")
ConsoleWrite("New Value of $righttemp: " & $righttemp)
$temp = BitAND(BitXOR(BitAND(BitShift($righttemp, 16), $masks[16]), $lefttemp), 65535)
ConsoleWrite("Executed assignment: $temp = BitAND(BitXOR(BitAND(BitShift($righttemp, 16), $masks[16]), $lefttemp), 65535)")
ConsoleWrite("New Value of $temp: " & $temp)
$keys[$n] = BitXOR($lefttemp, $temp)
ConsoleWrite("Executed assignment: $keys[$n] = BitXOR($lefttemp, $temp)")
ConsoleWrite("New Value of $keys[$n]: " & $keys[$n])
$keys[$n + 1] = BitXOR($righttemp, BitShift($temp, -16))
ConsoleWrite("Executed assignment: $keys[$n + 1] = BitXOR($righttemp, BitShift($temp, -16))")
ConsoleWrite("New Value of $keys[$n + 1]: " & $keys[$n + 1])
$n += 2
ConsoleWrite("Executed assignment: $n += 2")
ConsoleWrite("New Value of $n: " & $n)
Next
Next
Return $keys
EndFunc ;==>des_createKeys
Func stringToHex($s)
Dim $result = "0x"
Dim $temp = StringSplit($s, "")
For $i = 1 To $temp[0]
$result &= Hex(Asc($temp[$i]), 2)
ConsoleWrite("Executed assignment: $result &= Hex(Asc($temp[$i]), 2)")
ConsoleWrite("New Value of $result: " & $result)
Next
Return $result
EndFunc ;==>stringToHex
Ein paar weitere Sätze zum wie usw. werde ich die Tage noch hier und [Only registered and activated users can see links. Click Here To Register...] posten.