查看: 19110|回复: 9

js客户端有没有好的方式实现加密

[复制链接]
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
发表于 2014-1-8 19:38 | 显示全部楼层 |阅读模式
1 现有部分加密遇到资深的还是能破
2 有没有办法实现如百度等的js服务来加密??
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
发表于 2014-1-8 21:41 | 显示全部楼层
只有扰码器, 没有加密的东西!

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2014-1-15 16:27 | 显示全部楼层
本帖最后由 liyihongcug 于 2014-1-26 22:59 编辑

请参看地图web 好几家公司间接方式早已经实现的
只不过还是花好长时间(js很好的人)还是有办法破解
可以借鉴他们的思路 多层隐藏function food() { }; $(function () { $("#cun".bind("click", function () {var food1 = new food(); food1.name = "1";var food2 = new food(); food2.name = "b";var w = new Array(); w[0] = food1;w[1] = food2;$.cookie("arar", w); alert($.cookie("arar");});
怎么取的arar这个coolie的时候吧里面的对象转换成food类型回答直接eval('function food() { }; $(function () { $("#cun".bind("click", function () {var food1 = new food(); food1.name = "1";var food2 = new food(); food2.name = "b";var w = new Array(); w[0] = food1;w[1] = food2;$.cookie("arar", w); alert($.cookie("arar");});')var top_ = {
        'index':'首页',
        'user':'用户',
        'tree':'模块树'
} ;
var all_list = [
        {
               
                 "index": [
                         {'name':'网站栏目管理','url':'1.html'},
                         {'name':'网站栏目管理2','url':'2.html'}
                 
               
                 
        },
        {
                "user": [
                         {'name':'用户管理','url':'user.html'},
                         {'name':'用户添加','url':'add.html'}
                 
               
        },
        {
                "tree": [
                         {'name':'模块树管理','url':'manager.html'},
                         {'name':'模块树添加','url':'add_new.html'},
                         {'name':'模块树添333加','url':'add_ne33w.html'}
                 
               
        }
];

上面定义了一个模块树 数组。。。。

另外在取出数据的时候也很好的取出



//根据顶部的下标得到左边菜单
function return_left_menu_by_index(index){

        var left_ = '' ;
        for(var i in all_list){
               
                for(var j in all_list){               
                        if(j == index){
                                //默认显示的菜单
                                //console.dir(all_list[j]);
                                for(var k in all_list[index]){
                                        //console.dir(k);
                                        var new_onclick = 'onclick=change_right_url("'+all_list[index][k].url+'"' ;
                                        left_+='<div style="width:120px; height:30px;line-height:30px;border:solid 1px; margin:3px;padding:2px;cursorointer" '+new_onclick+'>'+all_list[index][k].name+'</div>';
                                }
                        }
                       
                }
        }
       
        return left_ ;
}http://wangjian84075041.blog.163 ... 338020135804844953/


使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2014-1-26 23:03 | 显示全部楼层
本帖最后由 liyihongcug 于 2014-1-27 14:35 编辑

ar images=new Array();         //先声明一维
       for(var i=0;i<10;i++){                //一维长度为10
          images=new Array();         //在声明二维
          for(var j=0;j<20;j++){             //二维长度为20
             images[j]=1;
        } myAry["a"]="AAA";
    myAry["b"]="BBB";
    myAry["c"]="CCC";
    alert(myAry.c);
    alert(myAry.
http://wenku.baidu.com/link?url= ... gn9H4BrbpJqI-YG1zqi
/比如google地图中的卫星地图上没有标准信息,下面和实现添加标注层瓦片  
function addMarkerLayersTile(map){//为普通地图和混合地图添加地标瓦片信息  
    var label = new google.maps.ImageMapType({  
        getTileUrl: function(tile, zoom) {  
            var arr = ["mt0","mt1","mt2","mt3"];  
            var _u = arr[Math.floor(Math.random()*arr.length)];  
            return "http://"+_u+".google.com/vt/imgtp=png32&lyrs=h@140&hl=zh-CN&gl=cn&x="+(tile.x)+"&y="+(tile.y)+"&z="+zoom+"&s=Galil";  
        },  
        tileSize: new google.maps.Size(256, 256),  
        isPng:true  
    });  
    map.overlayMapTypes.insertAt(0, label);  
}  
//效果见www.gpsoo.net或[url=www.goocar.net]www.goocar.net[/url]    http://lovebeyond.iteye.com/blog/898608
http://blog.csdn.net/jiazimo/article/details/18711109
http://blog.csdn.net/jiazimo/article/details/18709843
http://m.blog.csdn.net/blog/laohoubin/9060221
http://www.myexception.cn/web/593788.html

google 地图 v3 使用自定义Marker在map下添加文字标签http://www.myexception.cn/web/593788.html
么久了没有人回应,着实让人有点心寒。不过我自己还是找到了解决办法。
http://google-maps-utility-library-v3.googlecode.com/svn/trunk/maplabel/
这个项目里有大神自定义的maplabel感谢这位大神的创作和分享。
http://www.tdmarketing.co.nz/blog/2011/03/09/create-marker-with-custom-labels-in-google-maps-api-v3/
这个供参考,而且有拖动的事件。不过我要用的就不用这么复杂了。理最近用到的googlemap应用 。v3版本的和v2版本的API差别很大,v3更加规范了,代码的结构也更合理。

写了一个标注点的函数:
Html代码  

  • function do_marker(edit_dot_lat,edit_dot_icon,edit_dot_title,edit_dot_info) {  
  •            if(edit_dot_info==""){  
  •                 edit_dot_info="这里是标注信息!";  
  •             }  
  •            //clearOverlays(infowindow);  
  •            //map.setCenter(myLatlng);  
  •            if(marker){  
  •                 marker.setMap(null);  
  •             }  
  •             //如果是编辑  
  •             if(edit_dot_lat!==""&&edit_dot_icon!==""){  
  •                   marker = new google.maps.Marker({  
  •                   position:edit_dot_lat,   
  •                   map: map,  
  •                   draggable:true,  
  •                   icon: edit_dot_icon,  
  •                   title:edit_dot_title  
  •                   });  
  •             }else{  
  •                   marker = new google.maps.Marker({  
  •                   position: map.getCenter(),   
  •                   map: map,  
  •                   draggable:true,  
  •                   icon: icons,  
  •                   title:"The hoodbc!"  
  •              });  
  •           }  
  •             google.maps.event.addListener(marker, 'click', function(event) {  
  •                     //alert(event.latLng.lng());  
  •                   $("#lat").val(marker.position);  
  •                   infos= new google.maps.InfoWindow({  
  •                   content: edit_dot_info   
  •                 }).open(map,marker);  
  •             });  
  •             //移动后的坐标  
  •             google.maps.event.addListener(marker,'dragend',function(event){  
  •                 //alert(event.latLng.lng());  
  •                 $("#lat").val(marker.position);  
  •                 $("#latleg").val(marker.position);  
  •             })  
  •        }  


http://hoodbc.iteye.com/blog/814871编辑已经输入的标注时,传入4个参数。当添加的标注拖动时触发事件,获取marker.position的坐标。


使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2014-2-21 15:35 | 显示全部楼层
JS中数组Array的用法{转载}

js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^
var arr = new Array();
arr[0] = "aaa";
arr[1] = "bbb";
arr[2] = "ccc";
//alert(arr.length);//3
arr.pop();
//alert(arr.length);//2
//alert(arr[arr.length-1]);//bbb
arr.pop();
//alert(arr[arr.length-1]);//aaa
//alert(arr.length);//1

var arr2 = new Array();
//alert(arr2.length);//0
arr2[0] = "aaa";
arr2[1] = "bbb";
//alert(arr2.length);//2
arr2.pop();
//alert(arr2.length);//1
arr2 = arr2.slice(0,arr2.length-1);
//alert(arr2.length);//0
arr2[0] = "aaa";
arr2[1] = "bbb";
arr2[2] = "ccc";
arr2 = arr2.slice(0,1);
alert(arr2.length);//1
alert(arr2[0]);//aaa
alert(arr2[1]);//undefined

shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined
var a = [1,2,3,4,5];
var b = a.shift(); //a:[2,3,4,5]   b:1

unshift:将参数添加到原数组开头,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5]   b:7
注:在IE6.0下测试返回值总为undefined,FF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。

pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined
var a = [1,2,3,4,5];
var b = a.pop(); //a:[1,2,3,4]   b:5//不用返回的话直接调用就可以了

push:将参数添加到原数组末尾,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.push(6,7); //a:[1,2,3,4,5,6,7]   b:7

concat:返回一个新数组,是将参数添加到原数组中构成的
var a = [1,2,3,4,5];
var b = a.concat(6,7); //a:[1,2,3,4,5]   b:[1,2,3,4,5,6,7]

splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...

在清空数组时,只需传递startIndex。

如果不删除所有元素,再传递deleteCount参数。

splice还具有先删除后添加的功能,即先删除几个元素,然后在删除的位置再添加若干元素,删除与添加的元素的个数没有必须相等,这时侯deleteCount也是要用到的。
var a = [1,2,3,4,5];
var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5]   b:[3,4]
var b = a.splice(0,1); //同shift
a.splice(0,0,-2,-1); var b = a.length;//同unshift
var b = a.splice(a.length-1,1);//同pop
a.splice(a.length,0,6,7); var b = a.length; //同push

reverse:将数组反序
var a = [1,2,3,4,5];
var b = a.reverse(); //a:[5,4,3,2,1]   b:[5,4,3,2,1]

sort(orderfunction):按指定的参数对数组进行排序
var a = [1,2,3,4,5];
var b = a.sort(); //a:[1,2,3,4,5]   b:[1,2,3,4,5]

slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组
var a = [1,2,3,4,5];
var b = a.slice(2,5); //a:[1,2,3,4,5]   b:[3,4,5]

join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
var a = [1,2,3,4,5];
var b = a.join("|"); //a:[1,2,3,4,5]   b:"1|2|3|4|5"

再给个利用数组模拟javaStringBuffer处理字符串的方法:

/**
* 字符串处理函数
*/
function StringBuffer() {
var arr = new Array;
this.append = function(str) {
    arr[arr.length] = str;
};

this.toString = function() {
    return arr.join("");//把append进来的数组ping成一个字符串
};
}

今天在应用中突然发现join是一种把数组转换成字符串的好方法,故封装成对象使用了:

/**
*把数组转换成特定符号分割的字符串
*/
function arrayToString(arr,separator) {
if(!separator) separator = "";//separator为null则默认为空
    return arr.join(separator);
}

/**
* 查找数组包含的字符串
*/
function arrayFindString(arr,string) {
var str = arr.join("");
    return str.indexOf(string);
}http://www.blogjava.net/zks518/archive/2011/06/24/352948.html

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2014-4-10 07:48 | 显示全部楼层
本帖最后由 liyihongcug 于 2014-4-10 09:08 编辑

举ASP.NET 页面之间传递值的几种方式。  
答. 1.使用QueryString, 如....?id=1; response. Redirect()....  
2.使用Session变量  
3.使用Server.Transfer
SP.NET Server.Transfer是在两个页面之间进行传值的好方法。

从A页面Transfer到B页面时,就可以在B页面通过Context.Handler获得A页面的一个类的实例,从而在B调用A的各个成员对象。 public class WebForm1 : System.Web.UI.Page  
{  
    protected System.Web.UI.WebControls.TextBox TextBox1;  
    protected System.Web.UI.WebControls.Button Button1;  
    private void Page_Load(object sender, System.EventArgs e)  
    {  
        Context.Items.Add("Context", "Context from Form1");  
    }  
    /// <summary>  
    /// 页面的数据作为public属性被后面的页面程序访问  
    /// </summary>  
    public string Time  
    {  
        get { return DateTime.Now.ToString(); }  
    }  
    public string TestFun()  
    {  
        return "Function of WebForm1 Called";  
    }  
    #region Web 窗体设计器生成的代码  
    override protected void OnInit(EventArgs e)  
    {  
        InitializeComponent();  
        base.OnInit(e);  
    }  
    private void InitializeComponent()  
    {  
        this.Button1.Click += new System.EventHandler(this.Button1_Click);  
        this.Load += new System.EventHandler(this.Page_Load);  
    }  
    #endregion  
    private void Button1_Click(object sender, System.EventArgs e)  
    {  
        Server.Transfer("WebForm2.aspx", true);  
    }  
}  

在WebForm2上放置一个Literal1控件,程序如下:

> 纯文本方式> 打印
public class WebForm2 : System.Web.UI.Page  
{  
    protected System.Web.UI.WebControls.Literal Literal1;  
    private void Page_Load(object sender, System.EventArgs e)  
    {  
        string strTxt = "";  
        if (!IsPostBack)  
        {  
            WebForm1 oForm = (WebForm1)this.Context.Handler;  
            strTxt += "Value of Textbox:" + Request.Form["TextBox1"] + "<br>";  
            strTxt += "Time Property:" + oForm.Time + "<br>";  
            strTxt += "Context String:" + Context.Items["Context"].ToString() + "<br>";  
            strTxt += oForm.TestFun() + "<br>";  
            Literal1.Text = strTxt;  
        }  
    }  
    #region Web 窗体设计器生成的代码  
    override protected void OnInit(EventArgs e)  
    {  
        InitializeComponent();  
        base.OnInit(e);  
    }  
    private void InitializeComponent()  
    {  
        this.Load += new System.EventHandler(this.Page_Load);  
    }  
    #endregion  
}  

补充说明:Transfer方法的第二个参数指示是否保留页面的Form和QuerryString的值。
你可以试着把它设为False,则在WebForm2中将读不到TextBox1的值。 http://www.itpub.net/thread-1839829-1-1.html

XML 与 HTML 的主要区别
答:1. XML是区分大小写字母的,HTML不区分。  
2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略

或者之类的结束 标记。在XML中,绝对不能省略掉结束标记。  
3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。  
4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。  
5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值 abstract class和interface有什么区别?
答:声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。



使用道具 举报

回复
论坛徽章:
350
2006年度最佳版主
日期:2007-01-24 12:56:49NBA大富翁
日期:2008-04-21 22:57:29地主之星
日期:2008-11-17 19:37:352008年度最佳版主
日期:2009-03-26 09:33:53股神
日期:2009-04-01 10:05:56NBA季后赛大富翁
日期:2009-06-16 11:48:01NBA季后赛大富翁
日期:2009-06-16 11:48:01ITPUB年度最佳版主
日期:2011-04-08 18:37:09ITPUB年度最佳版主
日期:2011-12-28 15:24:18ITPUB年度最佳技术原创精华奖
日期:2012-03-13 17:12:05
发表于 2014-4-11 21:20 | 显示全部楼层
   

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2014-5-22 15:47 | 显示全部楼层
本帖最后由 liyihongcug 于 2014-5-22 15:56 编辑

jquery 获取checkbox 或 select 的选中值(一组和单个)

博客分类: Javascript /Jquery / Bootstrap / Web

使用 jquery 获取一组或者单个 checkbox 的选中状态的值。下面通过一个示例进行说明,假设现有一页面有一组 checkbox 的 name 的值为 id ,那么获取这组 name=id 的checkbox的值的方法如下:
Js代码  
var id_array=new Array();  
$('input[name="id"]:checked').each(function(){  
    id_array.push($(this).val());//向数组中添加元素  
});  
var idstr=id_array.join(',');//将数组元素连接起来以构建一个字符串  
alert(idstr);  



另外 jquery 判断单个 checkbox 是否选中以及获取选中值的方法如下:
Js代码  
if($("#id").attr("checked")){//选中  
    alert($("#id").val());//打印选中的值  

至少有2种方式了
0


$("#selectId").val();  //获取当前的 value 值
$("#selectId").find("option:selected").text();   //获取 select 当前值的文本值 alert($("#sel").children().length);


使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2014-11-4 08:44 | 显示全部楼层
本文一共介绍了七种方法:
一:最简单的加密解密
二:转义字符"\"的妙用
三:使用Microsoft出品的脚本编码器Script Encoder来进行编码 (自创简单解码)
四:任意添加NUL空字符(十六进制00H) (自创)
五:无用内容混乱以及换行空格TAB**
六:自写解密函数法
七:错误的利用 (自创)
  在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝,实在让自己的心里有点不是滋味,要知道自己写点东西也挺累的......^*^
  但我们也应该清楚地认识到因为JAVASCRIPT代码是在IE中解释执行,要想绝对的保密是不可能的,我们要做的就是尽可能的增大拷贝者复制的难度,让他知难而退(但愿~!~),下面我结合自己这几年来的实践,及个人研究的心得,和大家一起来探讨一下网页中JAVASCRIPT代码的加密解密技术。
  以加密下面的JAVASCRIPT代码为例:

alert("《黑客防线》");

  一:最简单的加密解密
  大家对于JAVASCRIPT函数escape()和unescape()想必是比较了解啦(很多网页加密在用它们),分别是编码和解码字符串,比如例子代码用escape()函数加密后变为如下格式:
alert%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
  
如何?还看的懂吗?当然其中的ASCII字符"alert"并没有被加密,如果愿意我们可以写点JAVASCRIPT代码重新把它加密如下:
%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B
  
呵呵!如何?这次是完全都加密了!
当然,这样加密后的代码是不能直接运行的,幸好还有eval(codeString)可用,这个函数的作用就是检查JavaScript代码并执行,必选项 codeString 参数是包含有效 JavaScript 代码的字符串值,加上上面的解码unescape(),加密后的结果如下:

var code=unescape("%61%6C%65%72%74%28%22%u9ED1%u5BA2%u9632%u7EBF%22%29%3B");
eval(code)

  
是不是很简单?不要高兴,解密也就同样的简单,解密代码都摆给别人啦(unescape())!呵呵
  二:转义字符"\"的妙用
  大家可能对转义字符"\"不太熟悉,但对于JavaScript提供了一些特殊字符如:\n (换行)、 \r (回车)、\' (单引号 )等应该是有所了解的吧?其实"\"后面还可以跟八进制或十六进制的数字,如字符"a"则可以表示为:"\141"或"\x61"(注意是小写字符"x"),至于双字节字符如汉字"黑"则仅能用十六进制表示为"\u9ED1"(注意是小写字符"u"),其中字符"u"表示是双字节字符,根据这个原理例子代码则可以表示为:
八进制转义字符串如下:

eval("\141\154\145\162\164\50\42\u9ED1\u5BA2\u9632\u7EBF\42\51\73")

  
十六进制转义字符串如下:

eval("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")

  
  这次没有了解码函数,因为JavaScript执行时会自行转换,同样解码也是很简单如下:

alert("\x61\x6C\x65\x72\x74\x28\x22\u9ED1\u5BA2\u9632\u7EBF\x22\x29\x3B")

  
就会弹出对话框告诉你解密后的结果!三:使用Microsoft出品的脚本编码器Script Encoder来进行编码
  工具的使用就不多介绍啦!我是直接使用JavaScript调用控件Scripting.Encoder完成的编码!代码如下:

var Senc=new ActiveXObject("Scripting.Encoder");
var code='\r\nalert("《黑客防线》");\r\n';
var Encode=Senc.EncodeScriptFile(".htm",code,0,"");
alert(Encode);

  
编码后的结果如下:
#@~^FgAAAA==@#@&lsDD`J黑客防线r#p@#@&FgMAAA==^#~@
  
够难看懂得吧?但相应的解密工具早已出来,而且连解密网页都有!因为其解密网页代码过多,我就不多说拉!给大家介绍一下我独创的解密代码,如下:

function decode(){
#@~^FgAAAA==@#@&lsDD`J黑客防线r#p@#@&FgMAAA==^#~@
}
alert(decode.toString());

  
咋样?够简单吧?它是原理是:编码后的代码运行前IE会先对其进行解码,如果我们先把加密的代码放入一个自定义函数如上面的decode()中,然后对自定义函数decode调用toString()方法,得到的将是解码后的代码!
如果你觉得这样编码得到的代码LANGUAGE属性是JScript.Encode,很容易让人识破,那么还有一个几乎不为人知的window对象的方法execScript(),其原形为:
window.execScript( sExpression, sLanguage )
  
参数:
sExpression:  必选项。字符串(String)。要被执行的代码。
sLanguage :  必选项。字符串(String)。指定执行的代码的语言。默认值为 Microsoft JScript
使用时,前面的"window"可以省略不写!
利用它我们可以很好的运行编码后的JavaScript代码,如下:

execScript("#@~^FgAAAA==@#@&lsDD`J黑客防线r#p@#@&FgMAAA==^#~@","JScript.Encode")

  
你可以利用方法二对其中的""号内的字符串再进行编码,使得"JScript.Encode"以及编码特征码"#@~^"不出现,效果会更好!
  四:任意添加NUL空字符(十六进制00H)
  一次偶然的实验,使我发现在HTML网页中任意位置添加任意个数的"空字符",IE照样会正常显示其中的内容,并正常执行其中的JavaScript 代码,而添加的"空字符"我们在用一般的编辑器查看时,会显示形如空格或黑块,使得原码很难看懂,如用记事本查看则"空字符"会变成"空格",利用这个原理加密结果如下:(其中显示的"空格"代表"空字符")

a l er t (" 黑 客 防 线") ;

  
如何?是不是显得乱七八糟的?如果不知道方法的人很难想到要去掉里面的"空字符"(00H)的!
  五:无用内容混乱以及换行空格TAB**
  在JAVASCRIPT代码中我们可以加入大量的无用字符串或数字,以及无用代码和注释内容等等,使真正的有用代码埋没在其中,并把有用的代码中能加入换行、空格、TAB的地方加入大量换行、空格、TAB,并可以把正常的字符串用"\"来进行换行,这样就会使得代码难以看懂!如我加密后的形式如下:

"xajgxsadffgds";1234567890
625623216;var $=0;alert//@$%%&*()(&(^%^
//cctv function//
(//hhsaasajx xc
/*
asjgdsgu*/
"黑\
\
客\
防线"//ashjgfgf
/*
@#%$^&%$96667r45fggbhytjty
*/
//window
)
;"#@$#%@#432hu";212351436

至少如果我看到这样的代码是不会有心思去分析它的,你哪?
  六:自写解密函数法
  这个方法和一、二差不多,只不过是自己写个函数对代码进行解密,很多VBS病毒使用这种方法对自身进行加密,来防止特征码扫描!下面是我写的一个简单的加密解密函数,
加密代码如下(详细参照文件"加密.htm"):

function compile(code)
{
var c=String.fromCharCode(code.charCodeAt(0)+code.length);
for(var i=1;i
  
运行得到加密结果为:
o%CD%D1%D7%E6%9CJ%u9EF3%uFA73%uF1D4%u14F1%u7EE1Kd
  
相应的加密后解密的代码如下:

function uncompile(code)
{
code=unescape(code);
var c=String.fromCharCode(code.charCodeAt(0)-code.length);
for(var i=1;i
  
  七:错误的利用
  利用try{}catch(e){}结构对代码进行测试解密,虽然这个想法很好(呵呵,夸夸自己),因为实用性不大,我仅给个例子
<SCRIPT LANGUAGE="JavaScript">

var a='alert("《黑客防线》");';
var c="";
for(var i=0;i<a.length;i++){
c+=String.fromCharCode(a.charCodeAt(i)^61);}

alert(c);

//上面的是加密代码,当然如果真正使用这个方法时,不会把加密写上的
//现在变量c就是加密后的代码

//下面的函数t()先假设初始密码为0,解密执行,
//遇到错误则把密码加1,然后接着解密执行,直到正确运行

var d=c; //保存加密后的代码
var b=0; //假定初始密码为0
t();

function t(){
trycatch(e){
c="";
for(var i=0;i<d.length;i++){
c+=String.fromCharCode(d.charCodeAt(i)^b);}
b+=1;
t();
//setTimeout("t()",0);
}
}
</SCRIPT>http://www.alixixi.com/web/a/2008050746922.shtml  最好的文章

使用道具 举报

回复
论坛徽章:
18
授权会员
日期:2005-10-30 17:05:33美羊羊
日期:2015-03-04 14:48:58马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11紫蜘蛛
日期:2012-02-21 15:06:16嫦娥
日期:2012-02-21 15:05:212012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-02-26 01:01:03
 楼主| 发表于 2014-11-4 08:47 | 显示全部楼层
http://www.alixixi.com/web/a/2008050746922.shtml几个答案有很大的问题,为防止有人受到误导,我觉得有必要说一下:

密码在前端加密完全没有意义,对密码系统的安全性不会有任何提高,反而会引发不必要的麻烦。

首先,做前端开发的人需要知道,前端系统的控制权是完全在用户手里的,也就是说,前端做什么事情,用户有完全的控制权。

假设如同 @陈轩所说,前端做过了md5,后台就不用做了,这个做法会有什么后果?如果某一天,这个系统的数据库泄露了,黑客就直接拿到了每个用户的密码md5值,但此时,由于黑客知道密码是在前端进行哈希的,所以他不需要爆破出该md5对应的原文是什么,而是直接修改客户端向服务器发出的请求,把密码字段换成数据库中MD5就可以了,由于与数据库中记录一致,直接就会登录成功。这跟直接存储明文密码没有任何区别!!!所以不管前端是不是加密了密码,后台使用安全的哈希算法对内容再次转换是非常有必要的。(MD5可不行,要用bcrypt,我之前回答过一个类似的:随着显卡性能的高速发展,目前的快速Hash算法是否已经变得不够安全了?)
这个回答还有一个人赞同,希望大家别被错误答案误导了。

另外一个答案 @林鸿所说,在非安全HTTP连接上,可以防止原始密码被窃听。但问题在于由于你的登录系统接受的哈希过的密码,而不是原文,窃听者根本不需要原始密码,只要通过哈希结果就可以伪造请求登录系统。这样做只能防止被窃听到原文的密码被攻击者用在社会学攻击上,而不能改善该网站的安全性。所以不管前端是不是加密了密码,使用HTTPS安全连接进行登录都是非常有必要的。

以上我说的两点,合起来看就是:不管前端是否加密了密码,都不能以此为假设,让后端设计的安全等级下降,否则就会有严重的安全问题。实际上,前端进行密码加密,可以看做帮助用户多进行了一次原文的转换,不管用了什么加密算法,算出来的结果都是密码原文,你该如何保护用户的原始密码,就该如何保护此处的加密结果,因为对你的登录系统来说,它们都是密码原文。

以上这些,说明了密码加密是没有什么意义的,接下来,我要说明前端加密会带来什么问题。
1.有些人会认为前端进行了加密,可以降低后台的安全性需求,这种错误的观念会造成系统的安全漏洞。实际上,你不能对前端做任何的假设,所有跟安全相关的技术,都必须应用在后台上。
2.前端进行加密会造成页面需要js脚本才能运行,那么假设你的系统需要兼容不能运行js的客户端,就必须再设计一个使用原文的登录接口。
3.由于前端是不是加密,所有安全机制都必须照常应用,所以为系统增加这样的复杂性是完全没必要的,即使传输明文密码,只要正确使用了HTTPS连接和服务器端安全的哈希算法,密码系统都可以是很安全的。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表