设想了一套由脚本控制界面的流程,基本上实现了,并且可以调用脚本引擎
这程序十分的简单,就是定义了几种控件,带一些私有功能的,比如名字等等,也不用动态分配,直接定义一个数组就行了。
一个具有四个提示字符串,4个文本框,两个可执行按钮的代码如下
// TODO: Add extra initialization here
mine.FreeAll();
mine.SetMainWnd( ( CWnd * )this );
mine.Init( 3 );
mine.SetFont( &g____font12 );
mine.RunScript( _T( "static static_key = /"Key/"" ) );
mine.RunScript( _T( "edit key = /"/"" ) );
mine.RunScript( _T( "static static_icv = /"ICV/"" ) );
mine.RunScript( _T( "edit icv = /"/"" ) );
mine.RunScript( _T( "static static_input = /"Input/"" ) );
mine.RunScript( _T( "edit input = /"/"" ) );
mine.RunScript( _T( "static static_output = /"Output/"" ) );
mine.RunScript( _T( "edit output = /"/"" ) );
mine.RunScript( _T( "button 0 des_encode_ecb = /"des_encode_ecb/"" ) );
mine.SetEvent( _T( "des_encode_ecb output = des_encode_ecb( $input, $key )" ) );
mine.RunScript( _T( "button 1 des_decode_ecb = /"des_decode_ecb/"" ) );
mine.SetEvent( _T( "des_decode_ecb output = des_decode_ecb( $input, $key )" ) );
当点击按钮的时候,在pretranslatemessage中是否点击了按钮,然后执行
mine.DoClick( &lite, pwnd );
pwnd是点击按钮的指针,lite是一个脚本引擎。
执行加解密结果如下
//--single des encrypt
//--key = 11 22 00 00 00 00 00 00
//--plain = 33 44 00 00 00 00 00 00 cipher = 8D 26 B5 48 46 8D 69 E7
//
//--single des decrypt
//--key = 11 22 00 00 00 00 00 00
//--cipher = 8D 26 B5 48 46 8D 69 E7 plain = 33 44 00 00 00 00 00 00
//
新版的脚本引擎中,函数可以任意嵌套,函数执行顺序与常见流程不同,从左至右,有条件被执行的函数都被执行,未能执行的函数下次扫描执行。
以下图为例
密钥是
des_decode_ecb( des_encode_ecb( 11223344, 90909090 ), 90909090 )
输入是
des_decode_ecb( 5566778899aabbccddeeffaaaaaabbccdd, 11223344 )
执行的按钮是
des_encode_ecb按钮
实际上执行的脚本是
des_encode_ecb( 输入, 密钥 )
也就是
des_encode_ecb( des_decode_ecb( 5566778899aabbccddeeffaaaaaabbccdd, 11223344 ), des_decode_ecb( des_encode_ecb( 11223344, 90909090 ), 90909090 ) )
执行流程如下
从前往后,先执行
des_decode_ecb( 5566778899aabbccddeeffaaaaaabbccdd, 11223344 )
再执行
des_encode_ecb( 11223344, 90909090 )
然后执行第二次扫描,执行 des_decode_ecb( xxxxx, 90909090 )
再后执行第三遍扫描,执行 des_encode_ecb( mmmm, nnnn )
最后的执行结果就是最原始的数据5566..........
//----single des decrypt
//----key = 11 22 33 44 00 00 00 00
//----cipher = 55 66 77 88 99 AA BB CC plain = 42 D7 DA 5D 35 2E 5E A7
//----cipher = DD EE FF AA AA AA AA BB plain = EA 2C 56 3B B0 9D 0A 48
//----cipher = CC DD 00 00 00 00 00 00 plain = 29 D9 6E E2 5C 81 B3 58
//
//------single des encrypt
//------key = 90 90 90 90 00 00 00 00
//------plain = 11 22 33 44 00 00 00 00 cipher = 44 E0 70 AA FD A9 26 DD
//
//----single des decrypt
//----key = 90 90 90 90 00 00 00 00
//----cipher = 44 E0 70 AA FD A9 26 DD plain = 11 22 33 44 00 00 00 00
//
//--single des encrypt
//--key = 11 22 33 44 00 00 00 00
//--plain = 42 D7 DA 5D 35 2E 5E A7 cipher = 55 66 77 88 99 AA BB CC
//--plain = EA 2C 56 3B B0 9D 0A 48 cipher = DD EE FF AA AA AA AA BB
//--plain = 29 D9 6E E2 5C 81 B3 58 cipher = CC DD 00 00 00 00 00 00
//