<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 16  文章 - 42  trackbacks - 0
    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    失業(yè)中…

    常用鏈接

    留言簿(7)

    隨筆檔案(16)

    技術(shù)Blog

    搜索

    •  

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    Javascript寫的DES算法,目前只能使用8位的密鑰.
    <html>
    <head>
    <meta?http-equiv="content-type"?content="text/html;charset=gb2312">
    <title>DES算法-Code?by?梅雪香</title>
    <style?type="text/css">
    textarea
    {width:600px;?height:150px;}
    body
    {font-size:12px}
    input
    {font-size:12px}
    </style>
    <script?language="JavaScript">
    <!--
    var?DES?=?{
    ????
    //?initial?permutation?IP
    ????IP_Table?:?[
    ????????
    58,?50,?42,?34,?26,?18,?10,?2,?60,?52,?44,?36,?28,?20,?12,?4,
    ????????
    62,?54,?46,?38,?30,?22,?14,?6,?64,?56,?48,?40,?32,?24,?16,?8,
    ????????
    57,?49,?41,?33,?25,?17,??9,?1,?59,?51,?43,?35,?27,?19,?11,?3,
    ????????
    61,?53,?45,?37,?29,?21,?13,?5,?63,?55,?47,?39,?31,?23,?15,?7
    ????],
    ????
    //?final?permutation?IP^-1?
    ????IPR_Table?:??[
    ????????
    40,?8,?48,?16,?56,?24,?64,?32,?39,?7,?47,?15,?55,?23,?63,?31,
    ????????
    38,?6,?46,?14,?54,?22,?62,?30,?37,?5,?45,?13,?53,?21,?61,?29,
    ????????
    36,?4,?44,?12,?52,?20,?60,?28,?35,?3,?43,?11,?51,?19,?59,?27,
    ????????
    34,?2,?42,?10,?50,?18,?58,?26,?33,?1,?41,??9,?49,?17,?57,?25
    ????],
    ????
    //?permuted?choice?table?(key)?
    ????PC1_Table?:??[
    ????????
    57,?49,?41,?33,?25,?17,??9,??1,?58,?50,?42,?34,?26,?18,
    ????????
    10,??2,?59,?51,?43,?35,?27,?19,?11,??3,?60,?52,?44,?36,
    ????????
    63,?55,?47,?39,?31,?23,?15,??7,?62,?54,?46,?38,?30,?22,
    ????????
    14,??6,?61,?53,?45,?37,?29,?21,?13,??5,?28,?20,?12,??4
    ????],
    ????
    //?permuted?choice?key?(table)?
    ????PC2_Table?:?[
    ????????
    14,?17,?11,?24,??1,??5,??3,?28,?15,??6,?21,?10,
    ????????
    23,?19,?12,??4,?26,??8,?16,??7,?27,?20,?13,??2,
    ????????
    41,?52,?31,?37,?47,?55,?30,?40,?51,?45,?33,?48,
    ????????
    44,?49,?39,?56,?34,?53,?46,?42,?50,?36,?29,?32
    ????],
    ????
    //?number?left?rotations?of?pc1?
    ????LOOP_Table?:?[1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1],
    ????
    //?expansion?operation?matrix
    ????E_Table?:??[
    ????????
    32,??1,??2,??3,??4,??5,??4,??5,??6,??7,??8,??9,
    ?????????
    8,??9,?10,?11,?12,?13,?12,?13,?14,?15,?16,?17,
    ????????
    16,?17,?18,?19,?20,?21,?20,?21,?22,?23,?24,?25,
    ????????
    24,?25,?26,?27,?28,?29,?28,?29,?30,?31,?32,??1
    ????],
    ????
    //?32-bit?permutation?function?P?used?on?the?output?of?the?S-boxes?
    ????P_Table?:?[????16,?7,?20,?21,?29,?12,?28,?17,?1,??15,?23,?26,?5,??18,?31,?10,
    ?????????????????????
    2,??8,?24,?14,?32,?27,?3,??9,??19,?13,?30,?6,??22,?11,?4,??25?],

    ????
    //?The?(in)famous?S-boxes?
    ????S_Box?:?[
    ????????
    //?S1?
    ????????[[14,??4,?13,??1,??2,?15,?11,??8,??3,?10,??6,?12,??5,??9,??0,??7],
    ?????????[?
    0,?15,??7,??4,?14,??2,?13,??1,?10,??6,?12,?11,??9,??5,??3,??8],
    ?????????[?
    4,??1,?14,??8,?13,??6,??2,?11,?15,?12,??9,??7,??3,?10,??5,??0],
    ?????????[
    15,?12,??8,??2,??4,??9,??1,??7,??5,?11,??3,?14,?10,??0,??6,?13]],
    ????????
    //?S2?
    ????????[[15,??1,??8,?14,??6,?11,??3,??4,??9,??7,??2,?13,?12,??0,??5,?10],
    ?????????[?
    3,?13,??4,??7,?15,??2,??8,?14,?12,??0,??1,?10,??6,??9,?11,??5],
    ?????????[?
    0,?14,??7,?11,?10,??4,?13,??1,??5,??8,?12,??6,??9,??3,??2,?15],
    ?????????[
    13,??8,?10,??1,??3,?15,??4,??2,?11,??6,??7,?12,??0,??5,?14,??9]],
    ????????
    //?S3?
    ????????[[10,??0,??9,?14,??6,??3,?15,??5,??1,?13,?12,??7,?11,??4,??2,??8],
    ?????????[
    13,??7,??0,??9,??3,??4,??6,?10,??2,??8,??5,?14,?12,?11,?15,??1],
    ?????????[
    13,??6,??4,??9,??8,?15,??3,??0,?11,??1,??2,?12,??5,?10,?14,??7],
    ?????????[?
    1,?10,?13,??0,??6,??9,??8,??7,??4,?15,?14,??3,?11,??5,??2,?12]],
    ????????
    //?S4?
    ????????[[?7,?13,?14,??3,??0,??6,??9,?10,??1,??2,??8,??5,?11,?12,??4,?15],
    ?????????[
    13,??8,?11,??5,??6,?15,??0,??3,??4,??7,??2,?12,??1,?10,?14,??9],
    ?????????[
    10,??6,??9,??0,?12,?11,??7,?13,?15,??1,??3,?14,??5,??2,??8,??4],
    ?????????[?
    3,?15,??0,??6,?10,??1,?13,??8,??9,??4,??5,?11,?12,??7,??2,?14]],
    ????????
    //?S5?
    ????????[[?2,?12,??4,??1,??7,?10,?11,??6,??8,??5,??3,?15,?13,??0,?14,??9],
    ?????????[
    14,?11,??2,?12,??4,??7,?13,??1,??5,??0,?15,?10,??3,??9,??8,??6],
    ?????????[?
    4,??2,??1,?11,?10,?13,??7,??8,?15,??9,?12,??5,??6,??3,??0,?14],
    ?????????[
    11,??8,?12,??7,??1,?14,??2,?13,??6,?15,??0,??9,?10,??4,??5,??3]],
    ????????
    //?S6?
    ????????[[12,??1,?10,?15,??9,??2,??6,??8,??0,?13,??3,??4,?14,??7,??5,?11],
    ?????????[
    10,?15,??4,??2,??7,?12,??9,??5,??6,??1,?13,?14,??0,?11,??3,??8],
    ?????????[?
    9,?14,?15,??5,??2,??8,?12,??3,??7,??0,??4,?10,??1,?13,?11,??6],
    ?????????[?
    4,??3,??2,?12,??9,??5,?15,?10,?11,?14,??1,??7,??6,??0,??8,?13]],
    ????????
    //?S7?
    ????????[[?4,?11,??2,?14,?15,??0,??8,?13,??3,?12,??9,??7,??5,?10,??6,??1],
    ?????????[
    13,??0,?11,??7,??4,??9,??1,?10,?14,??3,??5,?12,??2,?15,??8,??6],
    ?????????[?
    1,??4,?11,?13,?12,??3,??7,?14,?10,?15,??6,??8,??0,??5,??9,??2],
    ?????????[?
    6,?11,?13,??8,??1,??4,?10,??7,??9,??5,??0,?15,?14,??2,??3,?12]],
    ????????
    //?S8?
    ????????[[13,??2,??8,??4,??6,?15,?11,??1,?10,??9,??3,?14,??5,??0,?12,??7],
    ?????????[?
    1,?15,?13,??8,?10,??3,??7,??4,?12,??5,??6,?11,??0,?14,??9,??2],
    ?????????[?
    7,?11,??4,??1,??9,?12,?14,??2,??0,??6,?10,?13,?15,??3,??5,??8],
    ?????????[?
    2,??1,?14,??7,??4,?10,??8,?13,?15,?12,??9,??0,??3,??5,??6,?11]]
    ????],
    ????Oct2Bin?:?[
    "0000","0001","0010","0011","0100","0101","0110","0111",
    ???????????????
    "1000","1001","1010","1011","1100","1101","1110","1111"?],
    ????
    //str?為八位的字符
    ????subKeys?:?new?Array(16),
    ????key?:?
    "",
    ????text?:?
    ""
    }
    ;

    DES.init?
    =?function(key,text){
    ????
    if(key?!=?this.key){
    ????????
    this.key=key;?
    ????????
    this.GenSubKey();
    ????}

    ????
    this.text=?text?+?"????????".substring(0,parseInt("07654321".charAt(?text.length%8?),10));
    }
    ;

    DES.GenSubKey?
    =?function(){
    ????
    var?arr?=?this.Permute(?this.Byte2Bit(this.key)?,?this.PC1_Table);
    ????
    var?AL?=?arr.slice(0,28);
    ????
    var?AR?=?arr.slice(28,56);
    ????
    for(var?i=0;?i<16;?i++)?{
    ????????
    for(var?j=0,k=this.LOOP_Table[i];j<k;j++){
    ????????????AL.push(AL.shift());
    ????????????AR.push(AR.shift());
    ????????}

    ????????
    this.subKeys[i]?=?this.Permute(?AL.concat(AR)?,?this.PC2_Table?);
    ????}

    }
    ;
    //數(shù)組ar存儲二進制數(shù)據(jù),該函數(shù)將從頭開始的每八位轉(zhuǎn)換成對應(yīng)的字符
    DES.Bit2Byte?=?function(ar,fCh){
    ????
    var?str="";
    ????
    if(fCh?==?"byte"){
    ????????
    var?tmpAr?=?ar.join("").match(/.{8}/g);
    ????????
    for(var?i=0,j=tmpAr.length;?i<j;?i++)
    ????????????str?
    +=?String.fromCharCode(parseInt(tmpAr[i],2));
    ?????}

    ????
    else?if(fCh?==?"hex"){
    ????????
    var?tmpAr?=?ar.join("").match(/.{4}/g);
    ????????
    for(var?i=0,j=tmpAr.length;?i<j;?i++)
    ????????????str?
    +=?"0123456789abcdef".charAt(parseInt(tmpAr[i],2));
    ????}

    ????
    else?return?"Error:Second?param?is?wrong.";
    ????
    return?str;
    }
    ;
    //將字符串轉(zhuǎn)換成二進制數(shù)組
    DES.Byte2Bit?=?function(str){
    ????
    for(var?i=0,j=8*str.length,ar?=?[],ch="";?i<j;?i++){
    ????????
    var?k?=?7?-?i%8;
    ????????
    if(k?==?7)?ch?=?str.charCodeAt(parseInt(i/8,10));
    ????????ar.push(?(ch?
    >>?k)?&?1?);
    ????}

    ????
    return?ar;
    }
    ;

    //將16進制字符串轉(zhuǎn)變成二進制數(shù)組
    DES.Hex2Bin?=?function(str){
    ????
    for(var?i=0,j=str.length,s="";?i<j;?i++)
    ????????s?
    +=?this.Oct2Bin[?parseInt(str.charAt(i),16)];
    ????
    return?s.split("");
    }
    ;

    DES.Xor?
    =?function(A,B){
    ????
    for(var?i=0,j=B.length,rtn=new?Array(j);?i<j;?i++)
    ????????rtn[i]?
    =?A[i]?^?B[i];
    ????
    return?rtn;
    }


    DES.Permute?
    =?function(ar,tb){
    ????
    for(var?i=0,j=tb.length,rtn=new?Array(j);i<j;i++)
    ????????rtn[i]?
    =?ar[tb[i]-1];
    ????
    return?rtn;
    }
    ;

    DES.F_func?
    =?function(Ri,Ki)
    {
    ????
    return?this.Permute(?this.S_func(?this.Xor(?this.Permute(?Ri?,?this.E_Table?)?,?Ki)?)?,?this.P_Table);
    }
    ;
    //ar為輸入48位串?dāng)?shù)組
    DES.S_func?=?function(ar){
    ????
    for(var?i=0,arRtn?=?[];i<8;i++){
    ????????
    var?x?=?i*6;
    ????????
    var?j?=?parseInt(""+ar[x]+ar[x+5],2);
    ????????
    var?k?=?parseInt(ar.slice(x+1,x+5).join(""),2);
    ????????arRtn?
    =?arRtn.concat(?this.Oct2Bin[?this.S_Box[i][j][k]?].split("")?);
    ????}

    ????
    return?arRtn;
    }


    //mode參數(shù)為處理模式."Encrypt":加密?"Decrypt":解密,默認為加密
    DES.Encrypt?=?function(mode){
    ????mode?
    =?mode?mode:"Encrypt";
    ????
    if(mode=="Decrypt")
    ????????
    var?plainTextAr?=?this.Hex2Bin(this.text).join("").match(/.{64}/g);
    ????
    else
    ????????
    var?plainTextAr?=?this.Byte2Bit(this.text).join("").match(/.{64}/g);
    ????
    for(var?i=0,j=plainTextAr.length;i<j;i++){
    ????????
    var?arr?=?this.Permute(plainTextAr[i].split(""),this.IP_Table)
    ????????
    var?AL?=?arr.slice(0,32);
    ????????
    var?AR?=?arr.slice(32,64);
    ????????
    if(mode?==?"Decrypt"){
    ????????????
    for(var?k=15;k>-1;k--){
    ????????????????
    var?tmp?=?AR.slice(0,32);
    ????????????????AR?
    =?this.Xor(this.F_func(AR,this.subKeys[k])?,?AL);
    ????????????????AL?
    =?tmp;
    ????????????}

    ????????}

    ????????
    else{
    ????????????
    for(var?k=0;k<16;k++){
    ????????????????
    var?tmp?=?AR.slice(0,32);
    ????????????????AR?
    =?this.Xor(this.F_func(AR,this.subKeys[k])?,?AL);
    ????????????????AL?
    =?tmp;
    ????????????}

    ????????}

    ????????plainTextAr[i]?
    =?this.Bit2Byte(this.Permute(AR.concat(AL),?this.IPR_Table),(mode=="Decrypt"?"byte":"hex"));
    ????}

    ????
    return?plainTextAr.join("").trim();
    }

    String.prototype.trim?
    =?function(){?return?this.replace(/\s+$/g,"");}
    //-->
    </script>

    <script?language="JavaScript">
    <!--
    var?$?=?document.getElementById;
    function?jiami(){
    ???DES.init($(
    "txtKey").value,$("taText").value?);
    ???$(
    "taCipher").value?=?DES.Encrypt();
    }

    function?jiemi(){
    ???DES.init($(
    "txtKey").value,$("taCipher").value?);
    ???$(
    "taText").value?=?DES.Encrypt("Decrypt");
    }

    //-->
    </script>
    </head>

    <body>
    請輸入加(解)密密鑰:
    <input?id="txtKey"?type="text"?onfocus="this.select()"?value="47944980"?size="10">
    <font?color="red">(*目前密鑰只能是八位)</font><br>

    未加密文本:
    <br>
    <textarea?id="taText">Hi,I'm?meixuexiang.</textarea>
    <input?type="button"?value="clear"?onclick="document.all[this.sourceIndex-1].value=''"><br>
    <input?type="button"?value="Encrypt"?onclick="jiami()">&nbsp;&nbsp;&nbsp;
    <input?type="button"?value="Decrypt"?onclick="jiemi()"><br><br>
    加密后文本:
    <br>
    <textarea?id="taCipher"></textarea>
    <input?type="button"?value="clear"?onclick="document.all[this.sourceIndex-1].value=''"><br>
    <p>code?by?meixx(<a?href="http://www.tkk7.com/mxx">梅雪香</a>)?2006-10-18?23:00?<a?href="mailto:wy_hd@163.com">信息反饋</a></p>
    </body>
    </html>
    posted on 2006-10-19 00:11 梅雪香 閱讀(5528) 評論(4)  編輯  收藏

    FeedBack:
    # re: DES算法的javascript實現(xiàn) 2006-12-11 17:52 黑風(fēng)手
    這個算法還有其他方法實現(xiàn),我的意思并不是說用其他語言,而是通過改變8個矩陣來改變明文和密文對應(yīng)順序
    這樣可以增進對DES的算法過程的進一步理解  回復(fù)  更多評論
      
    # re: DES算法的javascript實現(xiàn) 2006-12-31 09:03 rotApple
    強!!!!!
    但是...但....是.. 沒用~~~~
    沒人用js加密.  回復(fù)  更多評論
      
    # re: DES算法的javascript實現(xiàn) 2007-09-10 09:52 momo
    解密的時候有出錯吧。。  回復(fù)  更多評論
      
    # re: DES算法的javascript實現(xiàn) 2007-09-10 14:17 momo
    沒有沒有,是不支持中文...  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 免费国产a理论片| 日韩精品视频免费在线观看| **真实毛片免费观看| 亚洲免费二区三区| 成人毛片免费观看视频| 亚洲成a人片在线观看国产| 国产亚洲精久久久久久无码| 亚洲精品一区二区三区四区乱码| 在线观看亚洲AV日韩AV| 一区二区在线视频免费观看| 无码午夜成人1000部免费视频| 成年女人毛片免费播放人| 亚洲综合区小说区激情区 | 亚洲国产精品成人网址天堂| 国产日韩亚洲大尺度高清| 亚洲va在线va天堂va手机| 免费一级特黄特色大片| 久久久久高潮毛片免费全部播放 | 亚洲一区免费观看| 亚洲综合一区无码精品| 皇色在线免费视频| 久久久久久国产a免费观看黄色大片| 免费一级毛片清高播放| 亚洲AV无码精品无码麻豆| 亚洲精品自偷自拍无码| 最新国产乱人伦偷精品免费网站 | 亚洲AV无码之国产精品| 欧洲人成在线免费| 国产精品免费视频网站| 久久久久亚洲AV片无码| 久久久久亚洲国产AV麻豆| 久久国产精品免费观看| 全黄性性激高免费视频| 亚洲精品电影在线| 久久国产精品免费一区| 青青青国产免费一夜七次郎| 久久久亚洲精品国产| 免费福利资源站在线视频| 91精品免费国产高清在线| 中文亚洲AV片不卡在线观看| 亚洲午夜无码久久久久小说|