174 lines
7.3 KiB
Plaintext
174 lines
7.3 KiB
Plaintext
//⚠ aardio文件加解密 2.1 【光庆】
|
||
//光庆 http://chengxu.online
|
||
//资料: https://blog.csdn.net/sdlgq/article/details/121899182
|
||
|
||
import win.ui;
|
||
import win.dlg.message;
|
||
import fsys.dlg
|
||
import fonts.fontAwesome;
|
||
//import godking;
|
||
import godking.message;
|
||
/*DSG{{*/
|
||
var winform = win.form(cls="AFORM";text="aardio文件加解密 2.1 (光庆)";right=727;bottom=591;acceptfiles=1;border="none";max=false;parent=...;style=0)
|
||
winform.add(
|
||
bkplus={cls="bkplus";text=' \uF13E aardio文件加解密 2.1 (光庆)';left=0;top=0;right=728;bottom=56;align="left";bgcolor=1151245;color=15793151;font=LOGFONT(h=-16;name='FontAwesome');z=16};
|
||
checkbox={cls="checkbox";text="覆盖自身";left=70;top=510;right=160;bottom=529;font=LOGFONT(h=-14);z=5};
|
||
checkbox2={cls="checkbox";text="附加可解密代码";left=160;top=510;right=290;bottom=529;font=LOGFONT(h=-14);z=15};
|
||
checkbox3={cls="checkbox";text="生成提示文件";left=290;top=510;right=410;bottom=529;font=LOGFONT(h=-14);z=18};
|
||
edit={cls="edit";left=16;top=536;right=395;bottom=566;bgcolor=16777215;border=1;tabstop=1;z=2};
|
||
edit2={cls="edit";left=16;top=160;right=360;bottom=496;border=1;multiline=1;readonly=1;vscroll=1;z=6};
|
||
edit3={cls="edit";left=368;top=160;right=712;bottom=496;border=1;multiline=1;readonly=1;vscroll=1;z=7};
|
||
editpath={cls="edit";left=16;top=96;right=402;bottom=126;bgcolor=16777215;border=1;readonly=1;tabstop=1;z=1};
|
||
plusjiami={cls="plus";text='\uF023 加密';left=496;top=528;right=600;bottom=569;bgcolor=49152;border={radius=20};font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=11};
|
||
plusjiemi={cls="plus";text='\uF0F6 解密';left=608;top=528;right=712;bottom=569;bgcolor=49407;border={radius=20};font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=14};
|
||
plusliulan={cls="plus";text='\uF115 浏览';left=408;top=96;right=484;bottom=126;bgcolor=16744448;border={radius=15};color=16777215;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=13};
|
||
plusliulan2={cls="plus";text='\uF115 浏览';left=408;top=536;right=484;bottom=566;bgcolor=16744448;border={radius=15};color=16777215;font=LOGFONT(h=-16;name='FontAwesome');notify=1;z=12};
|
||
static={cls="static";text="1、加密后的文件仍可被aardio调用。2、加密时会把$包含的文件数据直接编译进加密文件。";left=64;top=72;right=720;bottom=88;color=8421504;transparent=1;z=17};
|
||
static2={cls="static";text="源文件";left=16;top=72;right=157;bottom=95;transparent=1;z=3};
|
||
static3={cls="static";text="保存到";left=16;top=512;right=69;bottom=531;font=LOGFONT(h=-14);transparent=1;z=4};
|
||
static4={cls="static";text="代码部分";left=16;top=136;right=157;bottom=159;transparent=1;z=8};
|
||
static5={cls="static";text="提示部分";left=368;top=136;right=509;bottom=159;transparent=1;z=9};
|
||
static6={cls="static";left=496;top=88;right=712;bottom=134;align="center";center=1;color=8388736;font=LOGFONT(h=-35;name='FontAwesome');transparent=1;z=10}
|
||
)
|
||
/*}}*/
|
||
|
||
winform.plusjiemi.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text='\uF00D'}
|
||
winform.plusjiami.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text='\uF00D'}
|
||
import win.ui.simpleWindow
|
||
var tt = win.ui.simpleWindow(winform,20,40,30,50,0xFF008CBA,0xFF00B4F4);
|
||
var msg = godking.message(winform);
|
||
var code,itls;
|
||
var chuli = function(str){
|
||
winform.plusjiemi.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text='\uF00D'}
|
||
winform.plusjiami.disabledText = {'\uF254';'\uF251';'\uF252';'\uF253';'\uF250';text='\uF00D'}
|
||
if !..io.exist(str) return ;
|
||
winform.editpath.text = str;
|
||
code = ..string.load(winform.editpath.text);
|
||
var kejiemi = ..string.endWith(code,'\1\2\3\4');
|
||
var index = ..string.find(code,"\/\**?intellisense\(");
|
||
if index {
|
||
itls = ..string.right(code,#code-index+1);
|
||
}
|
||
winform.edit2.text = code;
|
||
winform.edit3.text = itls;
|
||
var p = ..io.splitpath(str)
|
||
if p.name = "code" winform.edit.text = ..io.joinpath(p.dir,"user.aardio");
|
||
else winform.edit.text = "";
|
||
if ..string.startWith(code,"=aardio"){
|
||
if kejiemi {
|
||
winform.static6.text = '\uF023 可解密'
|
||
winform.plusjiemi.disabledText = null;
|
||
} else winform.static6.text = '\uF023 已加密'
|
||
winform.static6.color = 0x0000FF;
|
||
} else {
|
||
winform.plusjiami.disabledText = null;
|
||
winform.static6.text = '\uF0F6 未加密'
|
||
winform.static6.color = 0x259B24;
|
||
}
|
||
winform.static6.redraw()
|
||
|
||
}
|
||
|
||
winform.wndproc = function(hwnd,message,wParam,lParam){
|
||
select(message) {//判断消息类型
|
||
case 0x233/*_WM_DROPFILES*/ {
|
||
var str = win.getDropFile(wParam )[1];
|
||
if str chuli(str);
|
||
}
|
||
}
|
||
}
|
||
|
||
winform.plusjiami.oncommand = function(id,event){
|
||
if( winform.editpath.text == "" or !#code){
|
||
msg.frown("请选择要加密的文件!",1000)
|
||
return ;
|
||
}
|
||
if ..string.startWith(code,"=aardio"){
|
||
msg.err("该文件为加密文件!不能再次加密",1000)
|
||
return ;
|
||
}
|
||
var tfile = winform.edit.text;
|
||
if winform.checkbox.checked tfile=winform.editpath.text;
|
||
if !#tfile {
|
||
msg.frown("还没有选择保存的文件!",1000)
|
||
return ;
|
||
}
|
||
if ..string.lower(..io.splitpath(tfile).name)=="code" return msg.err("不能加密为code文件!",1000);
|
||
// 处理加密文本
|
||
var str = dumpcode(assert(loadcode(code)));
|
||
if winform.checkbox2.checked {
|
||
var pass = msg.input("请输入加密密码:",true);
|
||
if !#pass return ;
|
||
import crypt.aes
|
||
var aes = crypt.aes()
|
||
aes.setPassword(pass)
|
||
var a = aes.encrypt(pass++code++pass);
|
||
//..string.save(tfile, str ++ a ++ ..string.right("0000000000"+ #a,10))
|
||
..string.save(tfile, str ++ a ++ tostring(..raw.buffer({int v=#a}))++'\1\2\3\4')
|
||
} else {
|
||
..string.save(tfile, str)
|
||
}
|
||
// 处理智能提示文件
|
||
if winform.checkbox3.checked and #itls{
|
||
var tfile = ..io.splitpath(tfile);
|
||
tfile = tfile.drive++tfile.path++tfile.name++"_intellisense"++tfile.ext;
|
||
string.save(tfile,itls);
|
||
}
|
||
msg.ok("文件加密完成!",1000);
|
||
}
|
||
|
||
winform.plusliulan.oncommand = function(id,event){
|
||
var str = fsys.dlg.open("aardio文件|*.aardio||","请选择aardio代码文件")
|
||
if !str return ;
|
||
if str chuli(str);
|
||
}
|
||
|
||
winform.plusliulan2.oncommand = function(id,event){
|
||
var path = fsys.dlg.save("aardio文件|*.aardio||","保存编译后的二进制aardio文件")
|
||
if(path) winform.edit.text = path;
|
||
}
|
||
|
||
winform.plusjiemi.oncommand = function(id,event){
|
||
|
||
if (winform.editpath.text == "" or !#code){
|
||
msg.frown("请选择源文件!",1000)
|
||
return ;
|
||
}
|
||
if !..string.startWith(code,"=aardio"){
|
||
msg.err("该文件不是加密文件!不能解密",1000)
|
||
return ;
|
||
}
|
||
var tfile = winform.edit.text;
|
||
if winform.checkbox.checked tfile=winform.editpath.text;
|
||
if !#tfile {
|
||
msg.frown("还没有选择保存的文件!",1000)
|
||
return ;
|
||
}
|
||
|
||
if !..string.endWith(code,'\1\2\3\4') return msg.err("该文件不是含源代码的加密文件,不能解密!",1000);
|
||
|
||
var length = string.slice(code,-8,-5);
|
||
length = ..raw.convert(length,{int v})["v"];
|
||
if !length or length<1 or length>#code {
|
||
msg.err("加密信息不正确,不能解密!",1000)
|
||
return ;
|
||
}
|
||
|
||
var pass = msg.input("请输入解密密码:",true);
|
||
if !#pass return ;
|
||
|
||
var txt = ..string.slice(code,-length-8,-9);
|
||
import crypt.aes
|
||
var aes = crypt.aes()
|
||
aes.setPassword(pass)
|
||
var a = aes.decrypt(txt);
|
||
if !#a return msg.err("解密失败!",1000);
|
||
|
||
if !..string.startWith(a,pass) or !..string.endWith(a,pass) return msg.err("密码不正确!",1000);
|
||
a = ..string.slice(a,#pass+1,#a-#pass);
|
||
string.save(tfile,a);
|
||
msg.ok("文件解密完成!");
|
||
}
|
||
|
||
winform.show(true)
|
||
win.loopMessage( winform ); |