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
posten.






