JAVASCRIPT完全自学手册,中源码的验证修订实例

源代码在线查看: 17-4 文件加密、解密.hta

软件大小: 522 K
上传用户: zbcs1025
关键词: JAVASCRIPT 源码
下载地址: 免注册下载 普通下载 VIP

相关代码

				
				
				
				17-4  文件加密、解密
				
				* { font-size:12px; font-family:宋体, Arial; } /*规定了所有的字体样式*/
				body { overflow:auto; }
				a { color:blue; }
				
				
				var fso, fin, fout, fin_path, fout_path;
				//函数“$”根据指定字符串获取相应ID的对象
				function $(str){ return(document.getElementById(str)); }
				//窗体载入完毕时初始化
				window.onload = function(){
				    //创建FSO控件
				    fso = new ActiveXObject("Scripting.FileSystemObject");   
				}
				//当窗口卸载时确保文本流关闭
				window.onunload = function(){
				    try{ fin.Close(); }catch(e){}
				    try{ fout.Close(); }catch(e){}
				}
				//获取输入的文本流
				function getFile(){
				    //获取用户选择的文件地址
				    var f = selectFile();
				    //如果用户没有选择文件,则返回
				    if(!f)return;
				    //试图关闭已打开的文本流
				    try{ fin.Close(); }catch(e){}
				    //记录输入文件的路径
				    fin_path = f;
				    //输出源文件信息
				    $("l1").innerHTML = "源文件:" + fin_path;
				    $("l2").innerHTML = "需要处理的文件大小:" + fso.GetFile(f).size;
				    //打开文本流
				    fin = fso.OpenTextFile(fin_path);
				}
				//根据给定的扩展名生成新文件名
				function getNewFile(ext){
				    var f, f2, i, name;
				    f2 = fso.GetParentFolderName(fin_path);
				    name = fso.GetFileName(fin_path);
				    //如果新文件存在
				    if(fso.FileExists(fso.BuildPath(f2, name+"."+ext))){
				        i=0;
				        //在文件后缀名前加上数字,避免名称重复
				        while(fso.FileExists(fso.BuildPath(f2, name+"."+i+ext)))i++;
				        fout_path = fso.BuildPath(f2, name+"."+i+ext);
				    }else{
				        //直接获得输出文件的文件名
				        fout_path = fso.BuildPath(f2, name+"."+ext);
				    }
				    $("l5").innerHTML = "输出文件的路径:" + fout_path;
				    //试图关闭可能存在的输出文本流
				    try{ fout.Close(); }catch(e){}
				    //打开同时新建文本流
				    fout = fso.OpenTextFile(fout_path, 2, true);
				    return;
				}
				//加密函数核心
				function core_encode(str, pwd, line){
				    var i, re = [], len, len_p;
				    i = line; len = str.length; len_p = pwd.length;
				    //对一行内的每个字符,根据给定的密码和行号执行异或操作
				    for(var i=0; i< len; i++){
				        //对异或后得到的字符执行escape编码
				        re.push(escape(String.fromCharCode(str.charCodeAt(i)^pwd.charCodeAt((i+line)%len_p))));
				    }
				    //返回加密结果
				    return(re.join(""));
				}
				//解密函数核心
				function core_decode(str, pwd, line){
				    var i, re = [], len, len_p;
				    //首先对输入的字符串unescape反编码
				    str = unescape(str);
				    i = line; len = str.length; len_p = pwd.length;
				    //对一行内的每个字符,根据给定的密码和行号执行异或操作
				    for(var i=0; i< len; i++){
				        re.push(String.fromCharCode(str.charCodeAt(i)^pwd.charCodeAt((i+line)%len_p)));
				    }
				    return(re.join(""));
				}
				//加密函数
				function encode(){
				    var strLine, line, pwd;
				    //打开输出文本流
				    getNewFile("hen");
				    //获取密码
				    pwd = $("pass").value;
				    $("l4").innerHTML = "操作:加密";
				    //循环依次读入输入流中的每行,分别加密
				    while(!fin.AtEndOfStream){
				        line = fin.Line;
				        strLine = fin.ReadLine();
				        fout.WriteLine(core_encode(strLine, pwd, line));
				    }
				    //关闭输出
				    try{ fin.Close(); }catch(e){}
				    try{ fout.Close(); }catch(e){}
				    $("l6").innerHTML = "加密成功,加密后文件大小:"+fso.GetFile(fout_path).size;
				}
				
				function decode(){
				    var strLine, line;
				    //打开输出文本流
				    getNewFile("hde");
				    //获取密码
				    pwd = $("pass").value;
				    $("l4").innerHTML = "操作:解密";
				    while(!fin.AtEndOfStream){
				        line = fin.Line;
				        strLine = fin.ReadLine();
				        fout.WriteLine(core_decode(strLine, pwd, line));
				    }
				    //循环依次读入输入流中的每行,分别加密
				    try{ fin.Close(); }catch(e){}
				    try{ fout.Close(); }catch(e){}
				    $("l6").innerHTML = "解密成功,加密后文件大小:"+fso.GetFile(fout_path).size;
				}
				
				//弹出一个选择文件对话框
				function selectFile(){
				    var obj, strFilePath;
				    //创建一个新的文件选择输入框
				    obj = document.createElement("input");
				    obj.type = "file"; obj.style.display = "none";
				    document.body.appendChild(obj);
				    //模拟其鼠标单击事件,以弹出文件选择对话框
				    obj.click();
				    strFilePath = obj.value;
				    //移除文件选择输入框
				    document.body.removeChild(obj);
				    return(strFilePath);
				}
				
				
				
				
				
				    文件加密/解密
				    
				        请选择需要加密或解密的文件:选择
				        需要处理的文件大小
				        设置加密/解密的密码:
				        点击执行
				            加密
				            /解密操作
				        
				        输出文件的路径
				        执行结果
				    
				
				
							

相关资源