科帮网

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 盖世程序员 > javaWeb UKEY验证类似网银解决方案
总共48087条微博

动态微博

查看: 8533|回复: 1

javaWeb UKEY验证类似网银解决方案

[复制链接]

326

主题

72

听众

999

金钱

实习版主

该用户从未签到

优秀版主

跳转到指定楼层
楼主
发表于 2014-09-05 15:32:16 |只看该作者 |倒序浏览
登录协同工作平台安全解决方案

2 I! v% M8 \& i! u9 {7 U
[摘要]公司领导说登录验证的安全性如何保证,建议采用UKEY验证类似网银解决,调用第三方YT公司产品。
解决方案:
5 y0 f! L9 O8 C. c. v: H
前端页面:
  1. <embed id="s_simnew61"  type="application/npsyunew6-plugin" hidden="true"> </embed><!--创建firefox,chrome等插件-->
      b! J3 }1 U" p" b2 ^9 w! _/ L6 H" s) H
  2.     <script  type="text/javascript" language="javascript" >4 i$ @) @  \! q- o
  3.         //加载皮肤) H( k5 r1 n9 x9 K  ~. g$ C
  4.         var setTheme = function () {
    - F+ B1 f0 P/ z, A, t; S5 M, i' T
  5.             Ext.net.DirectMethods.GetThemeUrl(cbTheme.getValue(), {7 n2 t9 E+ l; X8 {! s! j. w/ L, \3 I
  6.                 success: function (result) {7 ^/ p6 h. `' K' _6 a
  7.                     Ext.net.ResourceMgr.setTheme(result);6 i+ F% _/ j3 n0 `8 N3 f" V3 l, F
  8.                 }3 j" d( ~$ J9 [
  9.             });5 ?7 ]7 y/ j- S3 @% l/ P6 K- T- m( D
  10.         };
    / X, q# n: f1 p' Z8 L: l
  11.         //回车出发
    4 s( r6 D+ A4 ^7 N* z0 i1 O
  12.         document.onkeydown = function (event) {0 ]/ p* K& X; i7 ?  H5 J) K
  13.             e = event ? event : (window.event ? window.event : null);6 v, a( O8 W5 I. U0 n( s; c
  14.             if (e.keyCode == 13) {9 p8 S0 F" y, q; x3 ?8 \
  15.                 //执行的方法  
    $ s/ d- d' A+ b( Z
  16.                 //alert('回车检测到了');
    4 Q5 o" J5 k$ Z
  17.                 //Ext.net.DirectMethods.Login();  j$ D" [4 I! P; p5 Y" U9 f
  18.                 login();
    6 U& }1 E/ Y& Q
  19.             }; R' M# O, D; p1 a1 Z
  20.         }
    - Q0 t- ?, X2 c- C1 j5 v2 p" S; c

  21. - V! U, ]) K# L0 `$ b+ a1 \
  22.         var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');7 w7 z1 R) L5 J( Y5 g( l" Z
  23.         function toHex(n) {5 K" A% |6 ?# c4 j* r- ^( s
  24.             var result = ''
    ) H% Y5 |& y" P+ V9 C& c  a
  25.             var start = true;: Z  Z: m2 R, j7 ]) d
  26.             for (var i = 32; i > 0; ) {7 U& l5 m( Z' y# C7 X
  27.                 i -= 4;
    7 r& {6 A% q0 D* t, t- i: [
  28.                 var digit = (n >> i) & 0xf;
    $ s8 v) W. V' M$ r* y3 ^8 _9 x! u* T
  29. - F, x& ], t3 V- g6 O- u5 U( x
  30.                 if (!start || digit != 0) {2 K/ E6 L( {* V# T- |5 R, ]
  31.                     start = false;
    9 J/ g1 L* R0 B+ g; v
  32.                     result += digitArray[digit];
    ) c' {* O2 O5 r; o  U" h
  33.                 }
    1 I9 T+ n5 n: X- h
  34.             }
    & x( H2 i# K$ _* k4 S4 T
  35.             return (result == '' ? '0' : result);
    7 W$ L! F# U7 a  K! R8 x; `
  36.         }
    ; G5 A4 _8 F; o8 R3 @4 A4 }
  37. 4 ~: u0 i0 @! ^; B# K: t
  38.         var login = function () {  _* T0 p& ]* K1 l* ^2 H- A, @4 d
  39.             var IsCheck = 'N';4 M9 d- y: C7 R' A* j. N2 y
  40.             if (window.location.host == "localhost:23111") {
    0 S% a, U, a8 m9 ]
  41.                 var DevicePath, ret, n, mylen;
    0 G2 `/ t, A, _6 k# W% U
  42.                 try {" c/ T! e( T  Z5 P, X
  43.                     //建立操作我们的锁的控件对象,用于操作我们的锁
    : L# E! T+ B& L. c( ]( o
  44.                     var s_simnew61;
    . @% a% Q( ?4 {* m4 f. ^
  45. + u" ~0 D! k& [, _1 t
  46.                     //创建插件或控件
    6 Z) u4 D% n" {' U, |" O* o; `
  47.                     if (navigator.userAgent.indexOf("MSIE") > 0 && !navigator.userAgent.indexOf("opera") > -1) {# s5 g' A3 m; L0 _$ A1 Z% a) P6 N
  48.                         s_simnew61 = new ActiveXObject("Syunew6A.s_simnew6");
    4 u! o( R  S3 M( h$ P  J2 a) o
  49.                     }
    , |. \& `7 z, j6 b, _; M" d1 y
  50.                     else {& c" ?) ]; ]/ n/ R. \/ a- X. s
  51.                         s_simnew61 = document.getElementById('s_simnew61');
    8 P& \4 T% z7 t+ A6 w
  52.                     }4 N- R. @7 P! ]: d  h

  53. : p& p8 R/ P1 g$ @% S- m
  54. 0 Q% ]' z6 Z  j: G- o) S% d7 j
  55.                     //查找是否存在锁,这里使用了FindPort函数
    # D$ u6 T/ k) D" O( A# m& J( I4 T
  56.                     DevicePath = s_simnew61.FindPort(0);: T; ?0 B0 B0 c( w( A/ x" U
  57.                     if (s_simnew61.LastError != 0) {
    4 M3 o4 B2 ?0 x: O! G; I5 c
  58.                         window.alert("没有找到Ukey ,请插入UKey");
    9 ~, `9 a- n$ x: y& |' _% t3 |
  59.                         //window.location.href = "err.html";
    6 {& A# R0 m, c1 }& j# \0 T0 f
  60.                         return;
    8 F; q: I) Z0 F" p2 S" c, c$ S5 u
  61.                     }0 W3 m! h  M, G+ m& B* ^( U

  62. : i" R1 e5 Y- T5 @9 \' r- j& r- E
  63.                     //这里返回对随机数的HASH结果
    , }2 I/ k! A2 ?% V& M3 v
  64.                     frmlogin.return_EncData.value = s_simnew61.EncString(frmlogin.rnd.value, DevicePath);
    $ ~' R+ S! y. H* ?& @0 i8 Z
  65.                     if (s_simnew61.LastError != 0) {# L, a, P9 X+ J/ ^; @
  66.                         window.alert("Err to StrEnc,ErrCode is:" + s_simnew61.LastError.toString());' u* W4 V7 j; Q6 v+ I+ s$ R
  67.                         return;
    # h: X$ s/ m' \& p* Y/ }3 X
  68.                     }
    - p( h/ M1 Q, T: j) j$ q
  69.                     IsCheck = 'Y';/ [& B3 q' Y. T! p5 T9 y5 t2 Z2 o
  70. # r3 e+ S4 A7 e2 R+ t
  71.                     Ext.net.DirectMethods.Login(IsCheck);4 X/ M  w2 c9 ~* M

  72. * T. o8 f3 R4 e0 ]+ Y
  73.                 } catch (e) {+ I. d. k) |! o
  74.                     alert("您在使用外网访问:" + e.name + ": " + e.message + "。可能是没有安装相应的控件或插件");
    7 \' o' _* w) N8 O5 A
  75.                 }
    ) b, K7 [- [/ J: l" ^
  76.             } else {
    ! o0 M( e6 x2 h5 z
  77.                 Ext.net.DirectMethods.Login(IsCheck);* e- ~3 p- |& Z+ T+ z
  78.             }
    + L" I: r% H1 ]1 @+ A
  79. : v. Q8 E4 u1 s1 r
  80.         };. A5 ^, m' F" d# f# H: O" a! R
  81.     </script>8 y. X$ l# e6 D4 ^+ O
  82.     <script type="text/javascript" language="javascript">
      v) x% `5 x( k7 x
  83.         function reloadCode() {5 ]% `- \- t9 S: [* G) M4 |0 K
  84.             var obj = document.getElementById('imgCode');7 U0 V% S7 I# x% r/ }8 q7 O2 f
  85.             obj.src = "VerifyCode.aspx?";
    6 p  s6 v, O# y8 f
  86.         }
    % E* o: M" [7 m# B# B
  87. 0 ]- L3 E/ h6 Z; B5 n
  88.     </script>
    + u4 L# C( R/ H" `# X' ]7 o
  89. CS代码:
    ) ]* E; I/ n4 Q" R+ j: \, M
  90. SoftKey2K ytsoftkey;
    + T* {/ Q! b/ h' m% P, {0 L; f
  91.        String KeyPath;7 E6 V$ f8 Q! s7 s5 U$ Q( n: W
  92.         private string _randomcode;% t. D5 U& ?5 m& x* J! Z
  93.         /// <summary>
    ; ~5 C) M2 G, C2 |: Q
  94.         /// 随机数8 }( s6 }2 W0 D6 b5 P
  95.         /// </summary>( U- J' [1 m. \
  96.         public string Randomcode0 V' ^" n" m2 z9 c0 K- j
  97.         {% _* k6 B% l+ m1 M
  98.             get { return _randomcode; }
    : l5 D* r( d% }; \! z- I% ?7 }
  99.             set { _randomcode = value; }
    ) y  A' C+ c% c# ~
  100.         }2 e' w: D4 Y/ [: o! a6 @
  101.         protected void Page_Load(object sender, EventArgs e)
    9 G2 h( O4 J" i' k
  102.         {
    . X% s8 T" W' T6 b0 P
  103.             if (!IsPostBack)
    " |, [7 F  d0 t+ ?/ y9 P9 d: w1 k
  104.             {9 n# \  t, L/ _, q5 p1 q
  105.                 System.Random random = new System.Random();
    ' i/ N- k. t7 J  M* _2 O
  106.                 Session["rnd"] = rnd.Value = random.Next(0, 2147483646).ToString();
    ! h" {% l9 g: `. x% a4 G3 c1 b, i
  107.                 Response.Cookies.Add(new HttpCookie("CheckCode", ""));
    4 ]; R: Z, u: b  a$ R' P
  108.             }1 V% y1 k9 e2 v1 F
  109.         }
    , L$ T! Z9 e  I9 M, `9 P2 u, J) q
  110. 3 j& P  m5 n9 }5 o/ n1 t7 a
  111.    $ ^! k# Z+ Q# n" L& H. n
  112.         [DirectMethod]! {( \8 X4 P6 H2 G: ^
  113.         public void Login(string IsCheck)
    $ @# o' T9 w. l) B- Y- _
  114.         {  \) t8 q5 B0 D7 K, e5 Q4 k* W
  115.             Check(IsCheck) ;7 A4 K3 T, O% \
  116.         
      ~$ t( d5 ~* f8 P  o
  117.         }
    1 U9 F/ r; F5 w! @1 U) A
  118.         /// <summary>
    2 C6 T" }8 S- K, ^
  119.         /// 登录验证
    # x) G, }$ p: |6 B4 g! d8 j3 [
  120.         /// </summary>
    , j( Y% E; x7 ?$ a* Y# @9 _, S4 k
  121.         /// <param name="IsCheck"></param>4 d& p, q3 p, Y/ |
  122.         private void Check(string IsCheck)
    5 t5 l" m$ z/ F' K  i( p: [
  123.         {
    ; b1 o6 o4 V" w- `6 {+ k4 K- x
  124.             if (Request.Cookies["CheckCode"] == null)$ l! n0 x  \- a+ K. t
  125.             {
    6 l1 }& G- b2 g
  126. . k+ D$ t& \0 c
  127.                 Notification.Show(new NotificationConfig: o" s& S) A3 p8 f! s9 b# u
  128.                 {3 e+ Y: _0 Y' u# s4 z
  129.                     Title = "提醒",  h7 J8 K1 c' B! }1 z8 w2 ?% I9 q
  130.                     Icon = Icon.Information,
    $ j2 ^$ O$ ~6 d. O% J3 _+ Y
  131.                     Html = "<font style='color:red;'>您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。</font>"
      `' {& T$ K4 d, Q! s" I( \
  132.                 });, h3 N- s# G8 \1 y/ Q- ~# V  O
  133.                 return;* _% v+ H/ r5 A3 D
  134.             }
    & ]& I& L, K& s- S+ Y8 V
  135.             //验证码比较- x  O' M4 t4 g) `. u4 }, S) J
  136.             if (String.Compare(Request.Cookies["CheckCode"].Value.ToUpper(), this.txtVerifyCode.Text.ToString().Trim().ToUpper(), true) != 0)8 J6 t5 n! T+ E( g4 d3 H- t
  137.             {
    5 E& Z/ `+ n% ~/ T' o+ {
  138.                 this.txtVerifyCode.SetValue("");
    0 P9 x) W$ m$ s/ z
  139.                 Notification.Show(new NotificationConfig/ g1 W3 b* m6 _
  140.                 {
    6 w# m6 R! p+ o# K( l. F
  141.                     Title = "提醒",
    + [- m$ u* t, _5 a% q6 ^# D+ H
  142.                     Icon = Icon.Information,
    / C$ X4 y% |& l7 p  J$ g
  143.                     Html = "<font style='color:red;'>验证码错误,请重新输入</font>"1 ?) B8 Q3 |: v: v- ^% }4 M" L; a
  144.                 });
    ! `7 n* Q4 {0 v- W
  145.                 X.AddScript("document.getElementById('imgCode').src='VerifyCode.aspx?';");) _1 l9 ?# Y7 H+ h
  146.                 return;$ c' r2 H9 ^5 f" I! `4 a# O
  147.   g' u+ d9 G3 m7 b  }

  148. 5 }* K; z2 p0 A' Z( ^8 y9 Y; q+ g
  149.             }3 m: L1 y& |/ S' n# H- \
  150.             else. J  d5 @3 B* g
  151.             {
    1 Y9 u  d0 `7 {4 I  C6 b" g8 l: O5 s
  152.                 Utility.MD5 md5 = new Utility.MD5();
    & Z2 R) F; F: E7 l2 h* @+ H) E
  153.                 DzPlatForm.Model.Users user = new Model.Users();
    . S- w# t; q6 G3 w
  154.                 user.USERNAME = Utility.Baseclass.SqlFilter(txtUserName.Text.Trim());//过滤危险字符
    9 [7 n. {! g% g+ Z
  155.                 user.PASSWORD = md5.MD5Encrypt(txtPassWord.Text.Trim());// md5.MD5Encrypt(Utility.Baseclass.SqlFilter(txtPassWord.Text.Trim()));//密码进行加密
    $ z; p$ J9 e% q. C& ^3 a
  156. ' |1 a1 W4 d) o! N, `' E+ b
  157.                 string sql = "select * from [users] where id=1";% j$ v8 Z$ b! v" H; W6 V: p
  158.                 DataTable dt = DbHelperSQL.Query(sql, null).Tables[0];
    / q5 B: a: |. ^6 J! _; z/ l

  159. 8 o& @' d  g* M* c' M
  160.                 DzPlatForm.BLL.UserBLL usermgr = new DzPlatForm.BLL.UserBLL();( S2 D  y1 B- p  g3 H
  161.                 string UserId = usermgr.LoginCheck(user);1 `2 m7 Z( Y8 U* q8 g$ ^( {- h
  162. 3 @# M5 I. ~# E: \. r' T; x
  163.                 if (UserId != "")
    0 c7 z) [1 s2 c) ]% A
  164.                 {4 f9 y6 k' t" Y+ k. J: _6 _

  165. 6 h% G, \1 N' {7 c3 K. p0 a# x
  166.                     Model.LoginLog lg = new Model.LoginLog();
    . }5 X# `1 p7 }/ g# M3 Z7 `) P6 o: k
  167.                     lg.Name = txtUserName.Text.Trim();5 R( C8 x+ d& ]( @' t
  168.                     lg.Browser = Utility.IpBrowserHelper.getBrowser();) o( J( T+ c0 q9 D. D8 @9 ?
  169.                     lg.Ip = Utility.IpBrowserHelper.getIP();- e  [' J; _, m0 i6 e7 N
  170.                     lg.System = Utility.IpBrowserHelper.SystemCheck();
      G; q) T& U) Z  C7 a$ d9 W
  171.                     BLL.LoginBLL logmgr = new BLL.LoginBLL();
      u' v3 i, b) Y
  172.                     logmgr.LoginInfor(lg);* `' S: M* w/ o# a. }. Y9 x
  173.                     usermgr.Record();9 |+ H- D6 M  D( y

  174. - M+ z! G) q0 k0 @1 n7 f
  175.                     Model.Indentify idf = new Model.Indentify();7 z& s  {, ^) M) o
  176.                     idf.Userid = int.Parse(UserId);
    & v; T( E5 a% ?3 s8 H1 b
  177.                     BLL.IndentifyBLL idmgr = new BLL.IndentifyBLL();, }% a' d  |' _' O2 o9 z
  178.                     idmgr.GetIndentify(idf);9 P3 I0 x8 f3 F. q$ Q& Z
  179.                     Session["userid"] = UserId;
    ; V' U; j3 b/ }' N9 V& N' X# r, \
  180.                     Session["UserCode"] = txtUserName.Text.Trim();
      B6 O$ Z) |% d/ K- t! {: ]
  181.                     Session["UserName"] = idf.Name;# g7 H. \% t4 d" S# Z% x9 s
  182.                     Session["utype"] = idf.IsSystem;% U- z5 d2 A7 R0 n' T, k* s6 B
  183.                     Session["uip"] = lg.Ip;
    # Q6 x/ Z$ i: i$ X
  184. ! m5 K& M+ H1 O( g( s

  185. # \" z5 {8 Y  G! ~' [% |
  186.                     //X.Msg.Show(new MessageBoxConfig
    & R% r: h% k! R3 n3 g+ b4 j
  187.                     //{
    7 X2 Q9 d- G3 k3 D9 n$ X$ x
  188.                     //    Title = "请等待",
    " M2 y7 Y' a) N1 k
  189.                     //    Message = "正在加载项",
    2 {, R) @, @% N; R
  190.                     //    ProgressText = "初始化中...",
    6 r3 _# V3 E1 a9 }
  191.                     //    Width = 300,
    - _$ e3 Z% }4 s5 d
  192.                     //    Progress = true,
    6 d  H: n/ F! C( L6 R6 k$ e0 R. t
  193.                     //    Closable = false,9 L* N+ @9 }9 n  m  k
  194.                     //    AnimEl = this.btnlogin.ClientID
    " U2 m/ k0 C. d9 Y- M
  195.                     //});
    5 h+ ]& S4 h; G: ~! h
  196. . B1 a  o/ r- C6 @, e4 E6 l8 v
  197.                     //this.StartLongAction();  g4 g  c1 h4 Q8 H& v9 b2 h
  198.                     String strData, m_StrEnc, Key, Flag;4 j6 ]$ H3 K& L- e0 J

  199.   V; m  |5 d, w% P7 t; f: W
  200.                     Flag = IsCheck;6 n1 D9 g+ j3 d0 j
  201.                     //Key:即增强算法密钥,这个要与设置在加密锁中的密钥一致
    ' w* Z# `3 _5 ~( c1 J6 v) }/ {
  202.                     //增强算法密钥可以是每一把都不相同,也可以是都相同,如果是不相同的可以根据用户名在从数据库中获取对应的增强算法密钥,可以根据安全性及自身具体情况而定,这里使用了一个固定的值
    ; w  p& H% r# y6 B" c6 k" ~% @
  203.                    // Key = "1234567890ABCDEF1234567890ABCDEF";+ a7 m" v0 E7 e& D, D# a7 l! D
  204.                     Key = idf.UkeyCode;
    , c0 C4 n  _8 V2 R% z
  205.                     //strData:要进行加密的数据
    ( W8 g+ v% v& @0 g4 y  Y
  206.                     strData = rnd.Value.Trim();//Session["rnd"].ToString();/ M% n& R( {6 G3 o/ G
  207.                     //'在服务器端对数据进行加密运算
    9 [; w* r3 X0 G! k. I9 v
  208.                     m_StrEnc = Global.m_softkey.StrEnc(strData, Key);
    ) G" f, ]  w+ T2 c0 Z
  209.                     //比较客户端加密锁返回的加密结果与服务端的加密结果是否相符,如果相符就认为是合法用户,由于使用了随机数,从而实现了一次一密的高安全性,可以用于高安全性的身份验证8 l: W$ I% g( W7 J
  210.                     if (Flag == "N")//内网不需要比对$ F  R9 L) L: T% e7 J; w0 z
  211.                     {
    + _& ?( `) V9 y( H; {- |0 G, L
  212.                         Response.Redirect("Index.aspx");
    , b8 f8 E) U5 H7 k' F# g
  213.                     }
    " H. A! y" T3 z5 v/ J
  214.                     else
    5 e2 m( x6 X* ]6 _3 M. d; e
  215.                     {6 p* J$ I7 ^: N; y: b
  216.                         if (m_StrEnc == return_EncData.Value)+ s6 J( O) R! o, T
  217.                         {
    # y; s4 C" j: N& w5 s% O
  218. 7 {4 C, `! c0 i" m/ v+ }
  219.                             Response.Redirect("Index.aspx");. m' g/ V' X8 x7 {
  220.                         }% c5 T! |) b- O2 n% S+ O) Q
  221.                         else4 |. n& O. S2 s0 x% A- K, m3 E5 z
  222.                         {. D- [8 i  y# D5 Z
  223.                             Notification.Show(new NotificationConfig
    " f! h8 y3 w2 z/ ?$ G* n8 m% [* o
  224.                             {, e" e! J0 v- C/ J/ G8 p* N5 O
  225.                                 Title = "提醒",
    2 v0 W: x. S; ]
  226.                                 Icon = Icon.Information,
    . q  d7 t( \1 y: T2 ]/ I
  227.                                 Html = "<font style='color:red;'>该用户不是合法用户!</font>"
      r. y, U( m1 b1 C* L$ n
  228.                             });# v% M1 z& p% W+ W( I3 l7 d
  229.                         }
    $ Y( B( s" i; X- ^/ E6 c
  230. 0 V* E/ v% H9 l; [6 B
  231.                     }
    7 k7 f0 @4 @  U5 _2 ?% I0 `, D
  232. 5 H. ?2 c5 w9 \; N9 s
  233.                 }- Y! D, J! Z% \
  234.                 else
    2 m1 i' x5 M/ Q" C
  235.                 {" a! P  M) W1 ]& [
  236. ' E: P/ K/ u4 a" s+ L* ?( W+ H$ A
  237.                     Notification.Show(new NotificationConfig
    9 k: h: S+ [8 o) ^: \5 R" F
  238.                     {
    # y0 [; F; T9 h2 ^, |
  239.                         Title = "提醒",
    3 s1 D9 a' ~. g7 |  ?
  240.                         Icon = Icon.Information,& X/ m/ e  T; f4 u$ E9 b
  241.                         Html = "<font style='color:red;'>帐号或者密码有误,请重新输入!</font>"2 M0 |4 [  ?( s6 x8 O

  242. * y3 ?  B6 ]% i
  243.                     });
    7 C" K9 D( @  B1 b
  244.                     X.AddScript("document.getElementById('imgCode').src='VerifyCode.aspx?';");+ S$ l5 h( R6 B! i6 B
  245.                 }
    ! f( [' `+ Q6 V$ P) [: f

  246. + }; U, R" B) F! O8 x3 E6 I: P
  247.             }# x5 Y% A. G9 \& ]9 i+ Z( N3 S, |
  248.         }, K9 T- ?% |0 e, j1 p
  249.         /// <summary>
    1 q4 B2 d! `; P( v1 T
  250.         /// 开始计算任务: i9 f! @' Q0 Z; s; [0 l
  251.         /// </summary>; o! M, v2 M4 K  @5 b; x
  252.         private void StartLongAction()
    7 }; n6 u& Y; q# y0 u5 T4 V
  253.         {! o# ~6 v- ^) d3 d$ _
  254.             this.Session["Task1"] = 0;4 h8 v/ J2 g% v" S
  255.             ThreadPool.QueueUserWorkItem(LongAction);7 Q6 r/ u$ ]* a& |

  256. 5 j% U) C* s7 D8 {) i
  257.             this.TaskManager1.StartTask("Task1");, l* a; d1 E9 L3 [
  258.         }
    5 G5 k5 K5 Y0 K2 o
  259.         /// <summary>
    7 {1 l% n& d+ r: @5 V& A
  260.         /// 计时器# L6 d5 F7 C& A
  261.         /// </summary>
    + P1 n) ^/ o9 L2 x2 J! T  m
  262.         /// <param name="state"></param>
    5 ^9 \9 H4 A7 C, e8 Y) q5 S* z
  263.         private void LongAction(object state)/ i2 D1 O. O; Z4 `) x& r
  264.         {$ K9 i; ^! E" j9 n
  265.             for (int i = 0; i < 100; i++)
    8 B' I, ~2 B/ Y0 x5 q
  266.             {( @* ]+ g) C4 N, H: ~/ J. P
  267.                 Thread.Sleep(10);
    9 w: Q1 y4 G  z+ w# d' F
  268.                 this.Session["Task1"] = i + 1;5 h: Z' d' U* B
  269.             }
    ; D3 D: m. j9 m0 o( c! r. N
  270.             this.Session.Remove("Task1");
    ( Q6 d' v: {* s8 u4 J: n2 S/ x: g
  271.         }
    " S# j7 ~! v4 Z% d8 z$ W: w% i
  272.         /// <summary>
    + N: D" M: J1 x5 S" t; W1 c( D% J
  273.         /// 刷新进度条3 S0 ~. s( e6 w, Y- [& U" b! G; F, E
  274.         /// </summary>
    ; r' {! n' Q5 ?  |- E1 n' @7 S
  275.         /// <param name="sender"></param>* f3 E. _, r" B% e2 k7 a- I1 Z
  276.         /// <param name="e"></param>$ d3 L* ^6 P' C
  277.         protected void RefreshProgress(object sender, DirectEventArgs e)
    ) q# T5 a1 I$ w! P7 x
  278.         {8 N3 I6 o* _4 j( W) n- P
  279.             object progress = this.Session["Task1"];
    3 [0 n1 T% o( G6 p: G) b0 a1 x
  280.             if (progress != null)
    0 q3 D( P6 a0 j8 G$ n; k
  281.             {: w9 Z5 D+ E5 i2 ~9 W1 n; D+ g" T
  282.                 X.Msg.UpdateProgress(((int)progress) / 100f, string.Format(" {0} % {1}", progress.ToString(), 100));# i) ~! v" z. ^0 K) R" b' \" d6 W, `1 m
  283.             }0 v/ [3 C0 `) W; i. g  x% G/ H& _
  284.             else8 l8 Z7 R* a; Z2 R
  285.             {
    0 J+ _: t7 Q% X' ~3 [# V
  286.                 this.TaskManager1.StopTask("Task1");' I6 v% V; q- I+ d( l1 @# o0 F
  287.                 X.MessageBox.Hide();5 w( J, D  [" w+ d; l' x
  288.                 Response.Redirect("Index.aspx");
    7 p3 w' f! |( W9 G! g, b! z
  289.             }
    7 E- u  I  p3 A# i9 M9 j9 c# g+ ?" ^
  290.         }
    ) S2 e$ e: Y; o( j- k4 T
  291.         /// <summary>
    4 }% V& T$ G( Y3 w
  292.         /// 更换皮肤
    ! J% H/ s" F& k2 \
  293.         /// </summary>
    * t* z" S4 Y3 i
  294.         /// <param name="theme"></param>
    : q, a, P3 E' E/ J# `2 c
  295.         /// <returns></returns>) M- Y# c4 y$ T9 Z8 [$ }* ^1 L
  296.         public string GetThemeUrl(string theme)! }; N/ @2 B; B0 j
  297.         {- u7 o& F" p3 ]2 ~) H) D+ c3 q
  298.             Theme temp = (Theme)Enum.Parse(typeof(Theme), theme);& B% H" T8 u$ u8 W
  299.             this.Session["Ext.Net.Theme"] = temp;
    , b$ K& P, F2 A# A* m
  300.             return (temp == Ext.Net.Theme.Default) ? "Default" : X.ResourceManager.GetThemeUrl(temp);
      F( a; Q) n+ G; c4 u/ A0 S
  301.         }! A! c( o9 n. F1 h/ t# \
  302. & d7 s; Y' ?1 _% j
  303.     }& A) o" ^5 C# H

  304. : p0 z0 j* ~# x5 V) d9 g
  305. 服务端代码:Global.asax
    1 u, _7 _& [. n( U
  306.         public class SoftKey
    / Q. S, i% R. y
  307.         {2 m6 s' b# X8 k
  308.             [DllImport("kernel32.dll")]
    - a$ d" h  E, g: t  r8 y
  309.             public static extern int lstrlenA(string InString);# l7 C5 X+ w0 U# c3 ~* \
  310.             [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")]
    ; V% I  U9 {- v" \/ C( x. J. T% f
  311.             public static extern void CopyStringToByte(byte[] pDest, string pSourceg, int ByteLenr);" |; U; I* W7 c6 g/ K
  312.             [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")]
    ! ]# [, ]: d  D* R9 U
  313.             public static extern void CopyByteToString(StringBuilder pDest, byte[] pSource, int ByteLenr);8 `/ p4 A4 P8 g& ]% e& d* M
  314. & W5 j) p3 L; F) {" k9 m
  315.             //以下用于将16进制字符串转化为无符号长整型7 e6 H" w. e8 z* o6 s# R
  316.             private uint HexToInt(string s)
    0 N( `+ G+ @$ i5 K; ?) w* {
  317.             {1 t6 Y% C* l- x4 |
  318.                 string[] hexch = { "0", "1", "2", "3", "4", "5", "6", "7",
    6 [7 `% z: W: q8 f
  319.                                                                        "8", "9", "A", "B", "C", "D", "E", "F"};
    ( R8 K" Y9 ~" i4 L) \- n6 G3 i
  320.                 s = s.ToUpper();
    2 v0 ]4 I+ ^' b& O/ W0 e, D
  321.                 int i, j;
    , B" u. g# K% [1 S8 i3 N8 U
  322.                 int r, n, k;- ~# s; g- T! g% p* B& U( G
  323.                 string ch;2 F* z% j  r" L5 C% _% s9 h' s

  324. + f/ z$ Y- V) V- a
  325.                 k = 1; r = 0;% L+ ?) g# H& n; I
  326.                 for (i = s.Length; i > 0; i--)
    ( e2 @' R; K# _6 ^1 Z  W" ^
  327.                 {  w4 _/ w9 g6 G& n$ m( Y
  328.                     ch = s.Substring(i - 1, 1);
    # L4 s' J! ]% m
  329.                     n = 0;
    0 c- S1 B# e; N/ x) ^. E
  330.                     for (j = 0; j < 16; j++): ]' V- s( @# b7 ^
  331.                         if (ch == hexch[j])
    : k5 I* W5 X  b! @$ v" A4 a$ u
  332.                             n = j;$ y: w3 o2 A" _. X
  333.                     r += (n * k);
    3 T; l+ }+ L) H" V" K, X6 B
  334.                     k *= 16;2 D3 {! z& o- n8 g
  335.                 }
    - X: L6 b7 v% K0 n6 l3 m
  336.                 return unchecked((uint)r);' Y1 R) h' p4 C( X  {2 C
  337.             }
    9 ]$ s% {- K" j5 M7 o
  338. 7 e6 X' N1 [, S# N( E& [# x
  339. ; o- W5 o. L' O3 F
  340.             public void EnCode(byte[] inb, byte[] outb, string Key)
    $ |1 J0 k9 @  c' [' E5 q! N
  341.             {) A% `- U! p' n

  342. & K% ~# d- k0 j: [+ k* N2 u
  343.                 UInt32 cnDelta, y, z, a, b, c, d, temp_2;
    / N- |7 k0 H& k0 K/ V
  344.                 UInt32[] buf = new UInt32[16];7 U$ |* U+ s. x' S7 Z# W
  345.                 int n, i, nlen;
    & @# U$ |! T" ?0 O( D- A( R
  346.                 UInt32 sum;
    * t7 v- c9 w) m: w+ Y
  347.                 //UInt32 temp, temp_1;9 M' W4 V5 @% z9 ]
  348.                 string temp_string;' Z& U+ l, |. u# ^! z+ \
  349. % g9 c% a9 l8 T4 E

  350. ! J0 l* E' a1 q6 z; s4 B
  351.                 cnDelta = 2654435769;
    + v+ Q& Y4 V# ^
  352.                 sum = 0;
    0 c  C+ L9 r# F; E

  353. ' F, B. a/ H/ k7 w+ h, _+ q, _
  354.                 nlen = Key.Length;% R- e: D; w6 A) o! x9 S" `
  355.                 i = 0;6 L8 ?' c# Q/ t, j$ d
  356.                 for (n = 1; n <= nlen; n = n + 2)  Z6 @% U, i% Y. G* ]
  357.                 {
    0 Z+ _. s& ^% v  s2 G
  358.                     temp_string = Key.Substring(n - 1, 2);
    1 s% q5 ]# c! r! ]6 h
  359.                     buf[i] = HexToInt(temp_string);
    % a5 h& |( u+ b, W: Y
  360.                     i = i + 1;" I- g; t  w3 x+ F4 h
  361.                 }& @; P) _) @) H$ ]7 c; S, l3 s
  362.                 a = 0; b = 0; c = 0; d = 0;* t% M! {3 \; \6 O$ W) h! ]
  363.                 for (n = 0; n <= 3; n++)2 B% B6 b  ^" S: A' g3 a4 G
  364.                 {( o3 D  [: ~$ q& Y; O
  365.                     a = (buf[n] << (n * 8)) | a;" ^+ b8 Q# {$ ^$ ^! B+ v! E
  366.                     b = (buf[n + 4] << (n * 8)) | b;6 Q2 r; J0 _3 r& D# l+ t
  367.                     c = (buf[n + 4 + 4] << (n * 8)) | c;6 h. X5 F+ n8 P- _8 b! o
  368.                     d = (buf[n + 4 + 4 + 4] << (n * 8)) | d;
    7 x: Q  h0 @3 e% r" J
  369.                 }' F+ U, ]* s$ q; Y3 y

  370. 1 u) |* k- Y  b9 L2 D: K2 X

  371. 6 U0 n1 ?, ]6 v6 r# c
  372. 6 m" q# o& S5 v% h0 X8 {& _2 `
  373.                 y = 0;+ f& G2 G* \0 V* h) \$ I% {. N
  374.                 z = 0;2 ~; K! I4 k0 J$ p: r) Z+ v3 b
  375.                 for (n = 0; n <= 3; n++)' \( k; }- `. J0 E1 [6 U0 M5 W
  376.                 {  A- x, N2 d" m0 Q
  377.                     temp_2 = inb[n];, c! i* s8 y& b
  378.                     y = (temp_2 << (n * 8)) | y;
    " o1 _6 A2 `7 b8 }2 l+ k
  379.                     temp_2 = inb[n + 4];
    - P7 b+ J& l" y- n
  380.                     z = (temp_2 << (n * 8)) | z;
    & P, M- `5 A$ M8 {
  381.                 }* G/ F+ |* A) D. M

  382. . Z& H# @( ~& k( p- c9 O
  383. ' d1 {1 J7 c% Q/ t3 t5 v" A
  384.                 n = 32;5 |& d8 u! @* K

  385. " @' L* N! k. p# o
  386.                 while (n > 0)
    ; O: D/ y3 B8 U9 w+ g
  387.                 {
    + K0 e# H1 N- y2 V( n/ o
  388.                     sum = cnDelta + sum;2 V+ D0 l- i; r; W% F
  389. 8 Q& `' \6 e# |7 G7 _+ {! h$ W
  390.                     /*temp = (z << 4) & 0xFFFFFFFF;( C: g# `+ U, ]1 N
  391.                     temp = (temp + a) & 0xFFFFFFFF;9 Z; Q9 n  W# Q: T
  392.                     temp_1 = (z + sum) & 0xFFFFFFFF;$ Q, E0 t; ]( }6 f
  393.                     temp = (temp ^ temp_1) & 0xFFFFFFFF;
    8 w/ w! X! }% L9 V6 Q; I
  394.                     temp_1 = (z >> 5) & 0xFFFFFFFF;
    6 t7 a( |! D1 o; R
  395.                     temp_1 = (temp_1 + b) & 0xFFFFFFFF;8 W0 i4 q3 c! Y1 n
  396.                     temp = (temp ^ temp_1) & 0xFFFFFFFF;/ }4 U. i0 D0 P% L( X  r2 E
  397.                     temp = (temp + y) & 0xFFFFFFFF;
    0 Z& r- n4 E  R  l" {
  398.                     y = temp & 0xFFFFFFFF;*/. o7 y9 \- C: |/ q0 `: u; E  w
  399.                     y += ((z << 4) + a) ^ (z + sum) ^ ((z >> 5) + b);* ]; t* j9 D; C4 m5 B& H8 p3 A
  400. 8 C& d1 B/ u) I8 t; K& ^; |$ w
  401.                     /*temp = (y << 4) & 0xFFFFFFFF;& @+ w7 v) x! m( N; I. b
  402.                     temp = (temp + c) & 0xFFFFFFFF;; [1 w" X* ^; H4 J+ ^
  403.                     temp_1 = (y + sum) & 0xFFFFFFFF;
    , d6 u  X0 V( U1 \
  404.                     temp = (temp ^ temp_1) & 0xFFFFFFFF;
    * P0 m# b7 Q  [2 w
  405.                     temp_1 = (y >> 5) & 0xFFFFFFFF;
    1 }' d. K7 E7 [! l3 j9 M3 K
  406.                     temp_1 = (temp_1 + d) & 0xFFFFFFFF;
    1 `6 e% b1 E2 \
  407.                     temp = (temp ^ temp_1) & 0xFFFFFFFF;
    / I6 m( _) w( K' s! j
  408.                     temp = (z + temp) & 0xFFFFFFFF;
    1 j. {6 y( \% i6 ~2 ~4 Z
  409.                     z = temp & 0xFFFFFFFF;*/- R' B# Z) \: G) O8 V+ D/ u! J; j
  410.                     z += ((y << 4) + c) ^ (y + sum) ^ ((y >> 5) + d);
    ' i) L" W. n/ m
  411.                     n = n - 1;* ?/ [5 N: j4 }/ @9 D

  412. - V1 G: T4 k" u8 d
  413.                 }
      p8 z  [! O7 X' i

  414. " b8 m5 s9 ]( Q
  415.                 for (n = 0; n <= 3; n++)
    ( X0 Q* ~5 K7 a8 ]0 r0 `" U
  416.                 {
    ) C0 k; t0 U/ x! m% k
  417.                     outb[n] = System.Convert.ToByte((y >> (n * 8)) & 255);
    7 F3 I9 _4 R, |3 x; x3 X7 j% F
  418.                     outb[n + 4] = System.Convert.ToByte((z >> (n * 8)) & 255);) f) I, e( {5 S4 {! `
  419.                 }
    6 z$ Z4 Z- N2 r" ~  w6 l
  420. ! X, Q0 Q$ e- n$ b6 D6 u- M
  421.             }! i* ]9 K) K) b; c1 J  z

  422. . Z& R/ b' O6 R
  423.             public void DeCode(byte[] inb, byte[] outb, string Key)
    6 {: K; Z" d% p4 W
  424.             {; c; D1 M+ S0 T& d( z

  425. , \) d! g/ h0 b4 M9 q; M" Z
  426.                 UInt32 cnDelta, y, z, a, b, c, d, temp_2;- F; r% ?7 Q8 y) W5 {
  427.                 UInt32[] buf = new UInt32[16];
    8 `, P' `; o* q: x, V
  428.                 int n, i, nlen;5 F# t+ y4 x% F7 l1 _5 q
  429.                 UInt32 sum;$ ~7 m% R+ L% i% T
  430.                 //UInt32 temp, temp_1;
    # C" m. b) r5 v! a6 r5 f- b- u- `
  431.                 string temp_string;, n- t0 o3 ~* T. U

  432. ! u& V  e+ u) e* i$ M' ]
  433. : W( A% J! x1 m1 N+ a/ v; r3 u0 ^
  434.                 cnDelta = 2654435769;2 {2 S% |$ o3 ^6 T, t+ F! z
  435.                 sum = 0xC6EF3720;
      H1 A  ~) n2 u# q. _4 ^

  436. + i8 L& G+ m9 i$ d! y  x
  437.                 nlen = Key.Length;
    3 e0 ~7 m8 s' c4 u/ c+ ?% F
  438.                 i = 0;
    , y2 X# Q! U. }! v( ^) b: G: {
  439.                 for (n = 1; n <= nlen; n = n + 2)
    ! o0 G# t1 i5 ~: e$ y& q
  440.                 {1 k8 t( a) T( l; r6 c
  441.                     temp_string = Key.Substring(n - 1, 2);, l* d7 V( `+ C
  442.                     buf[i] = HexToInt(temp_string);
    8 m. t1 y* J5 t0 M( s) l
  443.                     i = i + 1;
      r9 m' M# g! T' M2 [, o
  444.                 }/ s0 i2 E& d( S$ o' A: D
  445.                 a = 0; b = 0; c = 0; d = 0;
    ! T6 _3 m; G- X
  446.                 for (n = 0; n <= 3; n++)
    1 M9 @) ~; L- J# o
  447.                 {" u/ a& Z8 I- `( O
  448.                     a = (buf[n] << (n * 8)) | a;% o0 ^6 m4 l  _8 K2 `
  449.                     b = (buf[n + 4] << (n * 8)) | b;. R/ I* F. J' N: W0 U- A. e" {
  450.                     c = (buf[n + 4 + 4] << (n * 8)) | c;
    ; u/ Q$ b9 V6 h% ?. p* m
  451.                     d = (buf[n + 4 + 4 + 4] << (n * 8)) | d;( X. _+ {; f! O/ U# P
  452.                 }9 L+ M# Z* O9 S  X

  453. 8 \) ~( S/ {# W# m/ s

  454. # _8 @: K' `( E( B, J7 u

  455. " i$ ]0 A" M' |/ q; n+ [
  456.                 y = 0;5 x( q8 i2 N% r& z  t, e
  457.                 z = 0;
    7 J) x8 _. p- g. P* {7 [. L% [
  458.                 for (n = 0; n <= 3; n++)
    ; ~" i7 R$ M( u' z2 V8 F
  459.                 {
    4 |0 I# D! H! C
  460.                     temp_2 = inb[n];! d7 N9 j7 C3 H* @& b: n9 X
  461.                     y = (temp_2 << (n * 8)) | y;
    1 K4 K3 W+ ]/ P5 W- Q
  462.                     temp_2 = inb[n + 4];" p5 h& }/ D, m5 u5 I( `: a
  463.                     z = (temp_2 << (n * 8)) | z;( |& o1 V; l: V
  464.                 }
    6 r$ G+ r/ X  n+ l5 e/ g. W+ `
  465. 2 H* {2 x, @% F
  466. : A' q5 Y7 T% x0 \5 x, s/ V$ n! c
  467.                 n = 32;0 i  i: L- T3 X% O
  468. 6 P/ n5 q  a& u: R0 j) w
  469.                 while (n-- > 0)
    4 P* X( g8 S( U( S9 M" y* Q; O
  470.                 {
    8 h) Y( Q5 k9 X# E* u) F$ p
  471.                     z -= ((y << 4) + c) ^ (y + sum) ^ ((y >> 5) + d);
    % ]& ^$ W$ f$ h' k- l6 n$ u
  472.                     y -= ((z << 4) + a) ^ (z + sum) ^ ((z >> 5) + b);8 k( V( p3 p; X9 r' X* S' y
  473.                     sum -= cnDelta;
    1 n2 A4 j1 A9 g( M

  474. 9 x% G5 J: q3 G$ K% [* B
  475.                 }3 ?- E: [) j( w
  476. & \; [9 g$ y2 K% O8 r
  477.                 for (n = 0; n <= 3; n++)
    - A5 `* d* J4 I9 Q3 F
  478.                 {. c2 g( X2 f' Q
  479.                     outb[n] = System.Convert.ToByte((y >> (n * 8)) & 255);
    4 u: O8 m5 Z: ~  y2 n
  480.                     outb[n + 4] = System.Convert.ToByte((z >> (n * 8)) & 255);
      F3 l: F# e) N/ H4 {
  481.                 }
    , Q9 y' A# F) `( ?
  482. 3 `, A4 A3 w. \: Z, ~7 O, P
  483.             }
    0 j. \7 z" ?2 d9 ~! p: `

  484. % ]% T- k$ _3 T5 t

  485. 0 s3 R: j+ U$ g9 w( {  F' V3 R( Y
  486.             public string StrEnc(string InString, string Key)//使用增强算法,加密字符串5 a- N# i! a& y* a- S+ q; O
  487.             {
    ! f0 c9 Z4 \( a1 C. a/ r5 p8 i
  488.   }8 r* |% z: h$ j2 z& C, F
  489.                 byte[] b, outb;
    . m1 K' q- H$ X
  490.                 byte[] temp = new byte[8], outtemp = new byte[8];
    & z7 P5 H' {) Z; @2 F1 t0 e7 [
  491.                 int n, i, nlen, outlen;2 R: V/ W' y" N; [& U8 @
  492.                 string outstring;$ U& O# Y: x) d  j8 [
  493. ' d5 J) I% [% n' g. C1 U
  494. : O9 p: {) V" L3 T  }$ d
  495.                 nlen = lstrlenA(InString) + 1;. P3 c% M* S: M" Z
  496.                 if (nlen < 8)6 D4 h6 v. m* z+ E3 q6 x
  497.                     outlen = 8;
    5 f, p+ m; ?0 K: ?. y. p3 S/ l- W
  498.                 else
      a9 x, A( U* b3 A) ]
  499.                     outlen = nlen;
    ; `0 w4 p; m  K  E2 P
  500.                 b = new byte[outlen];
    . u4 K* `! W2 x! i( G* b" p0 g
  501.                 outb = new byte[outlen];
    # f$ I! ~( X7 Q( T: [

  502. : b9 S2 u( p. R, Z
  503.                 CopyStringToByte(b, InString, nlen);
    ! s: ^# @) m# _1 V$ t
  504. . W. Y+ M# H( S6 _1 E8 f/ \  s
  505.                 b.CopyTo(outb, 0);2 t" A" w- a) @6 I6 a) T
  506. # [: F) O0 G) s5 A- k
  507.                 for (n = 0; n <= outlen - 8; n = n + 8)/ N6 @! q) B+ j, w( f4 b! b
  508.                 {
    2 b" K  Q  T4 @$ A. M
  509.                     for (i = 0; i < 8; i++) temp[i] = b[i + n];
    0 t) i9 h" U" o/ N
  510.                     EnCode(temp, outtemp, Key);5 {! Z) k2 y: N3 ]- Z, l! }
  511.                     for (i = 0; i < 8; i++) outb[i] = outtemp[i];
    2 Q( J5 F% I) R* j
  512.                 }
    ) z8 b7 v3 d% s

  513. 1 C5 a, A% Z5 M( N
  514.                 outstring = "";( ^# [8 f) [$ I7 b
  515.                 for (n = 0; n <= outlen - 1; n++)
    3 H* Y2 k* q$ Q5 T" J
  516.                 {  M# Z4 [! f; ~; W9 l
  517.                     outstring = outstring + outb[n].ToString("X2");0 S2 @% a% ~$ q) V8 m/ G
  518.                 }
    , ~4 @  G% m6 D# }3 g1 N8 J
  519.                 return outstring;; q5 x, I: c- A
  520.             }
    - g. \6 r: X, Q0 o0 h
  521.             public string StrDec(string InString, string Key) //使用增强算法,加密字符串, N- T9 n: A$ E$ K1 `0 Y
  522.             {3 S% k$ G7 h, D
  523.                 byte[] b, outb;. W& w6 G7 b% o# O- k* B
  524.                 byte[] temp = new byte[8], outtemp = new byte[8];8 ]. [% Y. Y* n8 }# ^# v  r
  525.                 int n, i, nlen, outlen;
    5 v! X) a: a5 O* P& h. g$ B9 W; }
  526.                 string temp_string;
    4 P% o' }5 L# u0 u0 E+ y; P
  527.                 StringBuilder c_str;% y0 n8 Y( Z* ~# V
  528. 8 _% F5 j/ j8 x2 e8 P
  529. 3 b0 h  y: L+ w% h
  530.                 nlen = InString.Length;3 E+ ^! V6 I! W- U# z+ y
  531.                 if (nlen < 16) outlen = 16;
    ) b+ ~+ S; k4 o6 ?+ T6 C
  532.                 outlen = nlen / 2;
    2 X! B$ }$ g/ {! C  U+ w% B1 [
  533.                 b = new byte[outlen];8 g2 F- S1 O  r3 P) a& W
  534.                 outb = new byte[outlen];
    . Q  T6 v+ c% w! e
  535. 0 M5 X/ J* g7 t6 k* C
  536.                 i = 0;
    ; {* p8 F4 @' ^
  537.                 for (n = 1; n <= nlen; n = n + 2)8 O% P) c" [' z6 Y0 t5 L$ j) ?# A
  538.                 {
    3 M. [/ j9 J; V8 C% V+ W6 P
  539.                     temp_string = InString.Substring(n - 1, 2);
    & k/ }8 J( U- H# J! p. K
  540.                     b[i] = System.Convert.ToByte(HexToInt(temp_string));
    - e: s) w+ t3 @7 G: c8 j. }
  541.                     i = i + 1;
    - V2 a7 V  \/ W9 @; G
  542.                 }  Y7 K5 v5 s. X$ [

  543.   q/ O8 x9 t8 @1 w
  544.                 b.CopyTo(outb, 0);
    # T# V6 Q1 j+ F
  545. / N* M* ~  Q3 _" e5 h0 N& h7 u
  546.                 for (n = 0; n <= outlen - 8; n = n + 8)
    ) G! h- R" X7 w
  547.                 {2 ^  A. z# }# M3 o6 O5 C2 y
  548.                     for (i = 0; i < 8; i++) temp[i] = b[i + n];2 k0 K$ a5 D; r: f' m8 @: a* L
  549.                     DeCode(temp, outtemp, Key);8 S' u  Z( M% z/ G) h( G
  550.                     for (i = 0; i < 8; i++) outb[i] = outtemp[i];; ?  Y) u7 ?( l( ~
  551.                 }
    ( t' P4 x* I0 O- A
  552. 6 J6 j7 A, f1 g6 o9 {
  553.                 c_str = new StringBuilder("", outlen);  @+ p/ k/ F4 h
  554.                 CopyByteToString(c_str, outb, outlen);
    + M8 _7 B8 V# d% i- F( {' Y9 V
  555.                 return c_str.ToString();3 l4 k  h; K: `
  556. 5 Q% T6 x- |, H6 f/ N& `7 Q
  557.             }
      h& o: m+ O/ k5 d4 g1 a

  558. : D& b0 k3 A3 \+ G" D

  559. 6 n5 _! C0 e; P6 D+ ]
  560.         }
复制代码

& e6 T4 p6 h- `% e# `, a* ?: ^$ _5 ~6 v. L) T
唯一锁写入Ukey:
; [# C, p5 R/ u5 b6 @6 x2 x

9 Z. }% ~7 _9 Q2 d+ Q
公网客户端:安装插件

& H7 u5 M4 M6 r( r' i
多文件安装版+需要先插入UKEY

) ?" X# S3 y6 W* e8 a
插入UKEY
0 u; C8 f6 l/ m# k( m% o! y4 w
登录成功!
, K* n; A% X( b% x" ?

科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、科帮网管理员和版主有权不事先通知发贴者而删除本文


JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

3

主题

0

听众

212

金钱

四袋长老

该用户从未签到

沙发
发表于 2016-03-07 17:54:10 |只看该作者
很不错哟,谢谢楼主,受教了。
回复

使用道具 举报

快速回复
您需要登录后才可以回帖 登录 | 立即注册

   

关闭

站长推荐上一条 /1 下一条

发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
快速回复 返回顶部 返回列表