|
该用户从未签到
|
|
登录协同工作平台安全解决方案
2 I! v% M8 \& i! u9 {7 U[摘要]公司领导说登录验证的安全性如何保证,建议采用UKEY验证类似网银解决,调用第三方YT公司产品。 解决方案:
5 y0 f! L9 O8 C. c. v: H
前端页面: - <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 - <script type="text/javascript" language="javascript" >4 i$ @) @ \! q- o
- //加载皮肤) H( k5 r1 n9 x9 K ~. g$ C
- var setTheme = function () {
- F+ B1 f0 P/ z, A, t; S5 M, i' T - Ext.net.DirectMethods.GetThemeUrl(cbTheme.getValue(), {7 n2 t9 E+ l; X8 {! s! j. w/ L, \3 I
- success: function (result) {7 ^/ p6 h. `' K' _6 a
- Ext.net.ResourceMgr.setTheme(result);6 i+ F% _/ j3 n0 `8 N3 f" V3 l, F
- }3 j" d( ~$ J9 [
- });5 ?7 ]7 y/ j- S3 @% l/ P6 K- T- m( D
- };
/ X, q# n: f1 p' Z8 L: l - //回车出发
4 s( r6 D+ A4 ^7 N* z0 i1 O - document.onkeydown = function (event) {0 ]/ p* K& X; i7 ? H5 J) K
- e = event ? event : (window.event ? window.event : null);6 v, a( O8 W5 I. U0 n( s; c
- if (e.keyCode == 13) {9 p8 S0 F" y, q; x3 ?8 \
- //执行的方法
$ s/ d- d' A+ b( Z - //alert('回车检测到了');
4 Q5 o" J5 k$ Z - //Ext.net.DirectMethods.Login(); j$ D" [4 I! P; p5 Y" U9 f
- login();
6 U& }1 E/ Y& Q - }; R' M# O, D; p1 a1 Z
- }
- Q0 t- ?, X2 c- C1 j5 v2 p" S; c
- V! U, ]) K# L0 `$ b+ a1 \- 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
- function toHex(n) {5 K" A% |6 ?# c4 j* r- ^( s
- var result = ''
) H% Y5 |& y" P+ V9 C& c a - var start = true;: Z Z: m2 R, j7 ]) d
- for (var i = 32; i > 0; ) {7 U& l5 m( Z' y# C7 X
- i -= 4;
7 r& {6 A% q0 D* t, t- i: [ - var digit = (n >> i) & 0xf;
$ s8 v) W. V' M$ r* y3 ^8 _9 x! u* T - - F, x& ], t3 V- g6 O- u5 U( x
- if (!start || digit != 0) {2 K/ E6 L( {* V# T- |5 R, ]
- start = false;
9 J/ g1 L* R0 B+ g; v - result += digitArray[digit];
) c' {* O2 O5 r; o U" h - }
1 I9 T+ n5 n: X- h - }
& x( H2 i# K$ _* k4 S4 T - return (result == '' ? '0' : result);
7 W$ L! F# U7 a K! R8 x; ` - }
; G5 A4 _8 F; o8 R3 @4 A4 } - 4 ~: u0 i0 @! ^; B# K: t
- var login = function () { _* T0 p& ]* K1 l* ^2 H- A, @4 d
- var IsCheck = 'N';4 M9 d- y: C7 R' A* j. N2 y
- if (window.location.host == "localhost:23111") {
0 S% a, U, a8 m9 ] - var DevicePath, ret, n, mylen;
0 G2 `/ t, A, _6 k# W% U - try {" c/ T! e( T Z5 P, X
- //建立操作我们的锁的控件对象,用于操作我们的锁
: L# E! T+ B& L. c( ]( o - var s_simnew61;
. @% a% Q( ?4 {* m4 f. ^ - + u" ~0 D! k& [, _1 t
- //创建插件或控件
6 Z) u4 D% n" {' U, |" O* o; ` - if (navigator.userAgent.indexOf("MSIE") > 0 && !navigator.userAgent.indexOf("opera") > -1) {# s5 g' A3 m; L0 _$ A1 Z% a) P6 N
- s_simnew61 = new ActiveXObject("Syunew6A.s_simnew6");
4 u! o( R S3 M( h$ P J2 a) o - }
, |. \& `7 z, j6 b, _; M" d1 y - else {& c" ?) ]; ]/ n/ R. \/ a- X. s
- s_simnew61 = document.getElementById('s_simnew61');
8 P& \4 T% z7 t+ A6 w - }4 N- R. @7 P! ]: d h
: p& p8 R/ P1 g$ @% S- m- 0 Q% ]' z6 Z j: G- o) S% d7 j
- //查找是否存在锁,这里使用了FindPort函数
# D$ u6 T/ k) D" O( A# m& J( I4 T - DevicePath = s_simnew61.FindPort(0);: T; ?0 B0 B0 c( w( A/ x" U
- if (s_simnew61.LastError != 0) {
4 M3 o4 B2 ?0 x: O! G; I5 c - window.alert("没有找到Ukey ,请插入UKey");
9 ~, `9 a- n$ x: y& |' _% t3 | - //window.location.href = "err.html";
6 {& A# R0 m, c1 }& j# \0 T0 f - return;
8 F; q: I) Z0 F" p2 S" c, c$ S5 u - }0 W3 m! h M, G+ m& B* ^( U
: i" R1 e5 Y- T5 @9 \' r- j& r- E- //这里返回对随机数的HASH结果
, }2 I/ k! A2 ?% V& M3 v - frmlogin.return_EncData.value = s_simnew61.EncString(frmlogin.rnd.value, DevicePath);
$ ~' R+ S! y. H* ?& @0 i8 Z - if (s_simnew61.LastError != 0) {# L, a, P9 X+ J/ ^; @
- window.alert("Err to StrEnc,ErrCode is:" + s_simnew61.LastError.toString());' u* W4 V7 j; Q6 v+ I+ s$ R
- return;
# h: X$ s/ m' \& p* Y/ }3 X - }
- p( h/ M1 Q, T: j) j$ q - IsCheck = 'Y';/ [& B3 q' Y. T! p5 T9 y5 t2 Z2 o
- # r3 e+ S4 A7 e2 R+ t
- Ext.net.DirectMethods.Login(IsCheck);4 X/ M w2 c9 ~* M
* T. o8 f3 R4 e0 ]+ Y- } catch (e) {+ I. d. k) |! o
- alert("您在使用外网访问:" + e.name + ": " + e.message + "。可能是没有安装相应的控件或插件");
7 \' o' _* w) N8 O5 A - }
) b, K7 [- [/ J: l" ^ - } else {
! o0 M( e6 x2 h5 z - Ext.net.DirectMethods.Login(IsCheck);* e- ~3 p- |& Z+ T+ z
- }
+ L" I: r% H1 ]1 @+ A - : v. Q8 E4 u1 s1 r
- };. A5 ^, m' F" d# f# H: O" a! R
- </script>8 y. X$ l# e6 D4 ^+ O
- <script type="text/javascript" language="javascript">
v) x% `5 x( k7 x - function reloadCode() {5 ]% `- \- t9 S: [* G) M4 |0 K
- var obj = document.getElementById('imgCode');7 U0 V% S7 I# x% r/ }8 q7 O2 f
- obj.src = "VerifyCode.aspx?";
6 p s6 v, O# y8 f - }
% E* o: M" [7 m# B# B - 0 ]- L3 E/ h6 Z; B5 n
- </script>
+ u4 L# C( R/ H" `# X' ]7 o - CS代码:
) ]* E; I/ n4 Q" R+ j: \, M - SoftKey2K ytsoftkey;
+ T* {/ Q! b/ h' m% P, {0 L; f - String KeyPath;7 E6 V$ f8 Q! s7 s5 U$ Q( n: W
- private string _randomcode;% t. D5 U& ?5 m& x* J! Z
- /// <summary>
; ~5 C) M2 G, C2 |: Q - /// 随机数8 }( s6 }2 W0 D6 b5 P
- /// </summary>( U- J' [1 m. \
- public string Randomcode0 V' ^" n" m2 z9 c0 K- j
- {% _* k6 B% l+ m1 M
- get { return _randomcode; }
: l5 D* r( d% }; \! z- I% ?7 } - set { _randomcode = value; }
) y A' C+ c% c# ~ - }2 e' w: D4 Y/ [: o! a6 @
- protected void Page_Load(object sender, EventArgs e)
9 G2 h( O4 J" i' k - {
. X% s8 T" W' T6 b0 P - if (!IsPostBack)
" |, [7 F d0 t+ ?/ y9 P9 d: w1 k - {9 n# \ t, L/ _, q5 p1 q
- System.Random random = new System.Random();
' i/ N- k. t7 J M* _2 O - Session["rnd"] = rnd.Value = random.Next(0, 2147483646).ToString();
! h" {% l9 g: `. x% a4 G3 c1 b, i - Response.Cookies.Add(new HttpCookie("CheckCode", ""));
4 ]; R: Z, u: b a$ R' P - }1 V% y1 k9 e2 v1 F
- }
, L$ T! Z9 e I9 M, `9 P2 u, J) q - 3 j& P m5 n9 }5 o/ n1 t7 a
- $ ^! k# Z+ Q# n" L& H. n
- [DirectMethod]! {( \8 X4 P6 H2 G: ^
- public void Login(string IsCheck)
$ @# o' T9 w. l) B- Y- _ - { \) t8 q5 B0 D7 K, e5 Q4 k* W
- Check(IsCheck) ;7 A4 K3 T, O% \
-
~$ t( d5 ~* f8 P o - }
1 U9 F/ r; F5 w! @1 U) A - /// <summary>
2 C6 T" }8 S- K, ^ - /// 登录验证
# x) G, }$ p: |6 B4 g! d8 j3 [ - /// </summary>
, j( Y% E; x7 ?$ a* Y# @9 _, S4 k - /// <param name="IsCheck"></param>4 d& p, q3 p, Y/ |
- private void Check(string IsCheck)
5 t5 l" m$ z/ F' K i( p: [ - {
; b1 o6 o4 V" w- `6 {+ k4 K- x - if (Request.Cookies["CheckCode"] == null)$ l! n0 x \- a+ K. t
- {
6 l1 }& G- b2 g - . k+ D$ t& \0 c
- Notification.Show(new NotificationConfig: o" s& S) A3 p8 f! s9 b# u
- {3 e+ Y: _0 Y' u# s4 z
- Title = "提醒", h7 J8 K1 c' B! }1 z8 w2 ?% I9 q
- Icon = Icon.Information,
$ j2 ^$ O$ ~6 d. O% J3 _+ Y - Html = "<font style='color:red;'>您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。</font>"
`' {& T$ K4 d, Q! s" I( \ - });, h3 N- s# G8 \1 y/ Q- ~# V O
- return;* _% v+ H/ r5 A3 D
- }
& ]& I& L, K& s- S+ Y8 V - //验证码比较- x O' M4 t4 g) `. u4 }, S) J
- 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
- {
5 E& Z/ `+ n% ~/ T' o+ { - this.txtVerifyCode.SetValue("");
0 P9 x) W$ m$ s/ z - Notification.Show(new NotificationConfig/ g1 W3 b* m6 _
- {
6 w# m6 R! p+ o# K( l. F - Title = "提醒",
+ [- m$ u* t, _5 a% q6 ^# D+ H - Icon = Icon.Information,
/ C$ X4 y% |& l7 p J$ g - Html = "<font style='color:red;'>验证码错误,请重新输入</font>"1 ?) B8 Q3 |: v: v- ^% }4 M" L; a
- });
! `7 n* Q4 {0 v- W - X.AddScript("document.getElementById('imgCode').src='VerifyCode.aspx?';");) _1 l9 ?# Y7 H+ h
- return;$ c' r2 H9 ^5 f" I! `4 a# O
- g' u+ d9 G3 m7 b }
5 }* K; z2 p0 A' Z( ^8 y9 Y; q+ g- }3 m: L1 y& |/ S' n# H- \
- else. J d5 @3 B* g
- {
1 Y9 u d0 `7 {4 I C6 b" g8 l: O5 s - Utility.MD5 md5 = new Utility.MD5();
& Z2 R) F; F: E7 l2 h* @+ H) E - DzPlatForm.Model.Users user = new Model.Users();
. S- w# t; q6 G3 w - user.USERNAME = Utility.Baseclass.SqlFilter(txtUserName.Text.Trim());//过滤危险字符
9 [7 n. {! g% g+ Z - user.PASSWORD = md5.MD5Encrypt(txtPassWord.Text.Trim());// md5.MD5Encrypt(Utility.Baseclass.SqlFilter(txtPassWord.Text.Trim()));//密码进行加密
$ z; p$ J9 e% q. C& ^3 a - ' |1 a1 W4 d) o! N, `' E+ b
- string sql = "select * from [users] where id=1";% j$ v8 Z$ b! v" H; W6 V: p
- DataTable dt = DbHelperSQL.Query(sql, null).Tables[0];
/ q5 B: a: |. ^6 J! _; z/ l
8 o& @' d g* M* c' M- DzPlatForm.BLL.UserBLL usermgr = new DzPlatForm.BLL.UserBLL();( S2 D y1 B- p g3 H
- string UserId = usermgr.LoginCheck(user);1 `2 m7 Z( Y8 U* q8 g$ ^( {- h
- 3 @# M5 I. ~# E: \. r' T; x
- if (UserId != "")
0 c7 z) [1 s2 c) ]% A - {4 f9 y6 k' t" Y+ k. J: _6 _
6 h% G, \1 N' {7 c3 K. p0 a# x- Model.LoginLog lg = new Model.LoginLog();
. }5 X# `1 p7 }/ g# M3 Z7 `) P6 o: k - lg.Name = txtUserName.Text.Trim();5 R( C8 x+ d& ]( @' t
- lg.Browser = Utility.IpBrowserHelper.getBrowser();) o( J( T+ c0 q9 D. D8 @9 ?
- lg.Ip = Utility.IpBrowserHelper.getIP();- e [' J; _, m0 i6 e7 N
- lg.System = Utility.IpBrowserHelper.SystemCheck();
G; q) T& U) Z C7 a$ d9 W - BLL.LoginBLL logmgr = new BLL.LoginBLL();
u' v3 i, b) Y - logmgr.LoginInfor(lg);* `' S: M* w/ o# a. }. Y9 x
- usermgr.Record();9 |+ H- D6 M D( y
- M+ z! G) q0 k0 @1 n7 f- Model.Indentify idf = new Model.Indentify();7 z& s {, ^) M) o
- idf.Userid = int.Parse(UserId);
& v; T( E5 a% ?3 s8 H1 b - BLL.IndentifyBLL idmgr = new BLL.IndentifyBLL();, }% a' d |' _' O2 o9 z
- idmgr.GetIndentify(idf);9 P3 I0 x8 f3 F. q$ Q& Z
- Session["userid"] = UserId;
; V' U; j3 b/ }' N9 V& N' X# r, \ - Session["UserCode"] = txtUserName.Text.Trim();
B6 O$ Z) |% d/ K- t! {: ] - Session["UserName"] = idf.Name;# g7 H. \% t4 d" S# Z% x9 s
- Session["utype"] = idf.IsSystem;% U- z5 d2 A7 R0 n' T, k* s6 B
- Session["uip"] = lg.Ip;
# Q6 x/ Z$ i: i$ X - ! m5 K& M+ H1 O( g( s
# \" z5 {8 Y G! ~' [% |- //X.Msg.Show(new MessageBoxConfig
& R% r: h% k! R3 n3 g+ b4 j - //{
7 X2 Q9 d- G3 k3 D9 n$ X$ x - // Title = "请等待",
" M2 y7 Y' a) N1 k - // Message = "正在加载项",
2 {, R) @, @% N; R - // ProgressText = "初始化中...",
6 r3 _# V3 E1 a9 } - // Width = 300,
- _$ e3 Z% }4 s5 d - // Progress = true,
6 d H: n/ F! C( L6 R6 k$ e0 R. t - // Closable = false,9 L* N+ @9 }9 n m k
- // AnimEl = this.btnlogin.ClientID
" U2 m/ k0 C. d9 Y- M - //});
5 h+ ]& S4 h; G: ~! h - . B1 a o/ r- C6 @, e4 E6 l8 v
- //this.StartLongAction(); g4 g c1 h4 Q8 H& v9 b2 h
- String strData, m_StrEnc, Key, Flag;4 j6 ]$ H3 K& L- e0 J
V; m |5 d, w% P7 t; f: W- Flag = IsCheck;6 n1 D9 g+ j3 d0 j
- //Key:即增强算法密钥,这个要与设置在加密锁中的密钥一致
' w* Z# `3 _5 ~( c1 J6 v) }/ { - //增强算法密钥可以是每一把都不相同,也可以是都相同,如果是不相同的可以根据用户名在从数据库中获取对应的增强算法密钥,可以根据安全性及自身具体情况而定,这里使用了一个固定的值
; w p& H% r# y6 B" c6 k" ~% @ - // Key = "1234567890ABCDEF1234567890ABCDEF";+ a7 m" v0 E7 e& D, D# a7 l! D
- Key = idf.UkeyCode;
, c0 C4 n _8 V2 R% z - //strData:要进行加密的数据
( W8 g+ v% v& @0 g4 y Y - strData = rnd.Value.Trim();//Session["rnd"].ToString();/ M% n& R( {6 G3 o/ G
- //'在服务器端对数据进行加密运算
9 [; w* r3 X0 G! k. I9 v - m_StrEnc = Global.m_softkey.StrEnc(strData, Key);
) G" f, ] w+ T2 c0 Z - //比较客户端加密锁返回的加密结果与服务端的加密结果是否相符,如果相符就认为是合法用户,由于使用了随机数,从而实现了一次一密的高安全性,可以用于高安全性的身份验证8 l: W$ I% g( W7 J
- if (Flag == "N")//内网不需要比对$ F R9 L) L: T% e7 J; w0 z
- {
+ _& ?( `) V9 y( H; {- |0 G, L - Response.Redirect("Index.aspx");
, b8 f8 E) U5 H7 k' F# g - }
" H. A! y" T3 z5 v/ J - else
5 e2 m( x6 X* ]6 _3 M. d; e - {6 p* J$ I7 ^: N; y: b
- if (m_StrEnc == return_EncData.Value)+ s6 J( O) R! o, T
- {
# y; s4 C" j: N& w5 s% O - 7 {4 C, `! c0 i" m/ v+ }
- Response.Redirect("Index.aspx");. m' g/ V' X8 x7 {
- }% c5 T! |) b- O2 n% S+ O) Q
- else4 |. n& O. S2 s0 x% A- K, m3 E5 z
- {. D- [8 i y# D5 Z
- Notification.Show(new NotificationConfig
" f! h8 y3 w2 z/ ?$ G* n8 m% [* o - {, e" e! J0 v- C/ J/ G8 p* N5 O
- Title = "提醒",
2 v0 W: x. S; ] - Icon = Icon.Information,
. q d7 t( \1 y: T2 ]/ I - Html = "<font style='color:red;'>该用户不是合法用户!</font>"
r. y, U( m1 b1 C* L$ n - });# v% M1 z& p% W+ W( I3 l7 d
- }
$ Y( B( s" i; X- ^/ E6 c - 0 V* E/ v% H9 l; [6 B
- }
7 k7 f0 @4 @ U5 _2 ?% I0 `, D - 5 H. ?2 c5 w9 \; N9 s
- }- Y! D, J! Z% \
- else
2 m1 i' x5 M/ Q" C - {" a! P M) W1 ]& [
- ' E: P/ K/ u4 a" s+ L* ?( W+ H$ A
- Notification.Show(new NotificationConfig
9 k: h: S+ [8 o) ^: \5 R" F - {
# y0 [; F; T9 h2 ^, | - Title = "提醒",
3 s1 D9 a' ~. g7 | ? - Icon = Icon.Information,& X/ m/ e T; f4 u$ E9 b
- Html = "<font style='color:red;'>帐号或者密码有误,请重新输入!</font>"2 M0 |4 [ ?( s6 x8 O
* y3 ? B6 ]% i- });
7 C" K9 D( @ B1 b - X.AddScript("document.getElementById('imgCode').src='VerifyCode.aspx?';");+ S$ l5 h( R6 B! i6 B
- }
! f( [' `+ Q6 V$ P) [: f
+ }; U, R" B) F! O8 x3 E6 I: P- }# x5 Y% A. G9 \& ]9 i+ Z( N3 S, |
- }, K9 T- ?% |0 e, j1 p
- /// <summary>
1 q4 B2 d! `; P( v1 T - /// 开始计算任务: i9 f! @' Q0 Z; s; [0 l
- /// </summary>; o! M, v2 M4 K @5 b; x
- private void StartLongAction()
7 }; n6 u& Y; q# y0 u5 T4 V - {! o# ~6 v- ^) d3 d$ _
- this.Session["Task1"] = 0;4 h8 v/ J2 g% v" S
- ThreadPool.QueueUserWorkItem(LongAction);7 Q6 r/ u$ ]* a& |
5 j% U) C* s7 D8 {) i- this.TaskManager1.StartTask("Task1");, l* a; d1 E9 L3 [
- }
5 G5 k5 K5 Y0 K2 o - /// <summary>
7 {1 l% n& d+ r: @5 V& A - /// 计时器# L6 d5 F7 C& A
- /// </summary>
+ P1 n) ^/ o9 L2 x2 J! T m - /// <param name="state"></param>
5 ^9 \9 H4 A7 C, e8 Y) q5 S* z - private void LongAction(object state)/ i2 D1 O. O; Z4 `) x& r
- {$ K9 i; ^! E" j9 n
- for (int i = 0; i < 100; i++)
8 B' I, ~2 B/ Y0 x5 q - {( @* ]+ g) C4 N, H: ~/ J. P
- Thread.Sleep(10);
9 w: Q1 y4 G z+ w# d' F - this.Session["Task1"] = i + 1;5 h: Z' d' U* B
- }
; D3 D: m. j9 m0 o( c! r. N - this.Session.Remove("Task1");
( Q6 d' v: {* s8 u4 J: n2 S/ x: g - }
" S# j7 ~! v4 Z% d8 z$ W: w% i - /// <summary>
+ N: D" M: J1 x5 S" t; W1 c( D% J - /// 刷新进度条3 S0 ~. s( e6 w, Y- [& U" b! G; F, E
- /// </summary>
; r' {! n' Q5 ? |- E1 n' @7 S - /// <param name="sender"></param>* f3 E. _, r" B% e2 k7 a- I1 Z
- /// <param name="e"></param>$ d3 L* ^6 P' C
- protected void RefreshProgress(object sender, DirectEventArgs e)
) q# T5 a1 I$ w! P7 x - {8 N3 I6 o* _4 j( W) n- P
- object progress = this.Session["Task1"];
3 [0 n1 T% o( G6 p: G) b0 a1 x - if (progress != null)
0 q3 D( P6 a0 j8 G$ n; k - {: w9 Z5 D+ E5 i2 ~9 W1 n; D+ g" T
- X.Msg.UpdateProgress(((int)progress) / 100f, string.Format(" {0} % {1}", progress.ToString(), 100));# i) ~! v" z. ^0 K) R" b' \" d6 W, `1 m
- }0 v/ [3 C0 `) W; i. g x% G/ H& _
- else8 l8 Z7 R* a; Z2 R
- {
0 J+ _: t7 Q% X' ~3 [# V - this.TaskManager1.StopTask("Task1");' I6 v% V; q- I+ d( l1 @# o0 F
- X.MessageBox.Hide();5 w( J, D [" w+ d; l' x
- Response.Redirect("Index.aspx");
7 p3 w' f! |( W9 G! g, b! z - }
7 E- u I p3 A# i9 M9 j9 c# g+ ?" ^ - }
) S2 e$ e: Y; o( j- k4 T - /// <summary>
4 }% V& T$ G( Y3 w - /// 更换皮肤
! J% H/ s" F& k2 \ - /// </summary>
* t* z" S4 Y3 i - /// <param name="theme"></param>
: q, a, P3 E' E/ J# `2 c - /// <returns></returns>) M- Y# c4 y$ T9 Z8 [$ }* ^1 L
- public string GetThemeUrl(string theme)! }; N/ @2 B; B0 j
- {- u7 o& F" p3 ]2 ~) H) D+ c3 q
- Theme temp = (Theme)Enum.Parse(typeof(Theme), theme);& B% H" T8 u$ u8 W
- this.Session["Ext.Net.Theme"] = temp;
, b$ K& P, F2 A# A* m - return (temp == Ext.Net.Theme.Default) ? "Default" : X.ResourceManager.GetThemeUrl(temp);
F( a; Q) n+ G; c4 u/ A0 S - }! A! c( o9 n. F1 h/ t# \
- & d7 s; Y' ?1 _% j
- }& A) o" ^5 C# H
: p0 z0 j* ~# x5 V) d9 g- 服务端代码:Global.asax
1 u, _7 _& [. n( U - public class SoftKey
/ Q. S, i% R. y - {2 m6 s' b# X8 k
- [DllImport("kernel32.dll")]
- a$ d" h E, g: t r8 y - public static extern int lstrlenA(string InString);# l7 C5 X+ w0 U# c3 ~* \
- [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")]
; V% I U9 {- v" \/ C( x. J. T% f - public static extern void CopyStringToByte(byte[] pDest, string pSourceg, int ByteLenr);" |; U; I* W7 c6 g/ K
- [DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")]
! ]# [, ]: d D* R9 U - public static extern void CopyByteToString(StringBuilder pDest, byte[] pSource, int ByteLenr);8 `/ p4 A4 P8 g& ]% e& d* M
- & W5 j) p3 L; F) {" k9 m
- //以下用于将16进制字符串转化为无符号长整型7 e6 H" w. e8 z* o6 s# R
- private uint HexToInt(string s)
0 N( `+ G+ @$ i5 K; ?) w* { - {1 t6 Y% C* l- x4 |
- string[] hexch = { "0", "1", "2", "3", "4", "5", "6", "7",
6 [7 `% z: W: q8 f - "8", "9", "A", "B", "C", "D", "E", "F"};
( R8 K" Y9 ~" i4 L) \- n6 G3 i - s = s.ToUpper();
2 v0 ]4 I+ ^' b& O/ W0 e, D - int i, j;
, B" u. g# K% [1 S8 i3 N8 U - int r, n, k;- ~# s; g- T! g% p* B& U( G
- string ch;2 F* z% j r" L5 C% _% s9 h' s
+ f/ z$ Y- V) V- a- k = 1; r = 0;% L+ ?) g# H& n; I
- for (i = s.Length; i > 0; i--)
( e2 @' R; K# _6 ^1 Z W" ^ - { w4 _/ w9 g6 G& n$ m( Y
- ch = s.Substring(i - 1, 1);
# L4 s' J! ]% m - n = 0;
0 c- S1 B# e; N/ x) ^. E - for (j = 0; j < 16; j++): ]' V- s( @# b7 ^
- if (ch == hexch[j])
: k5 I* W5 X b! @$ v" A4 a$ u - n = j;$ y: w3 o2 A" _. X
- r += (n * k);
3 T; l+ }+ L) H" V" K, X6 B - k *= 16;2 D3 {! z& o- n8 g
- }
- X: L6 b7 v% K0 n6 l3 m - return unchecked((uint)r);' Y1 R) h' p4 C( X {2 C
- }
9 ]$ s% {- K" j5 M7 o - 7 e6 X' N1 [, S# N( E& [# x
- ; o- W5 o. L' O3 F
- public void EnCode(byte[] inb, byte[] outb, string Key)
$ |1 J0 k9 @ c' [' E5 q! N - {) A% `- U! p' n
& K% ~# d- k0 j: [+ k* N2 u- UInt32 cnDelta, y, z, a, b, c, d, temp_2;
/ N- |7 k0 H& k0 K/ V - UInt32[] buf = new UInt32[16];7 U$ |* U+ s. x' S7 Z# W
- int n, i, nlen;
& @# U$ |! T" ?0 O( D- A( R - UInt32 sum;
* t7 v- c9 w) m: w+ Y - //UInt32 temp, temp_1;9 M' W4 V5 @% z9 ]
- string temp_string;' Z& U+ l, |. u# ^! z+ \
- % g9 c% a9 l8 T4 E
! J0 l* E' a1 q6 z; s4 B- cnDelta = 2654435769;
+ v+ Q& Y4 V# ^ - sum = 0;
0 c C+ L9 r# F; E
' F, B. a/ H/ k7 w+ h, _+ q, _- nlen = Key.Length;% R- e: D; w6 A) o! x9 S" `
- i = 0;6 L8 ?' c# Q/ t, j$ d
- for (n = 1; n <= nlen; n = n + 2) Z6 @% U, i% Y. G* ]
- {
0 Z+ _. s& ^% v s2 G - temp_string = Key.Substring(n - 1, 2);
1 s% q5 ]# c! r! ]6 h - buf[i] = HexToInt(temp_string);
% a5 h& |( u+ b, W: Y - i = i + 1;" I- g; t w3 x+ F4 h
- }& @; P) _) @) H$ ]7 c; S, l3 s
- a = 0; b = 0; c = 0; d = 0;* t% M! {3 \; \6 O$ W) h! ]
- for (n = 0; n <= 3; n++)2 B% B6 b ^" S: A' g3 a4 G
- {( o3 D [: ~$ q& Y; O
- a = (buf[n] << (n * 8)) | a;" ^+ b8 Q# {$ ^$ ^! B+ v! E
- b = (buf[n + 4] << (n * 8)) | b;6 Q2 r; J0 _3 r& D# l+ t
- c = (buf[n + 4 + 4] << (n * 8)) | c;6 h. X5 F+ n8 P- _8 b! o
- d = (buf[n + 4 + 4 + 4] << (n * 8)) | d;
7 x: Q h0 @3 e% r" J - }' F+ U, ]* s$ q; Y3 y
1 u) |* k- Y b9 L2 D: K2 X
6 U0 n1 ?, ]6 v6 r# c- 6 m" q# o& S5 v% h0 X8 {& _2 `
- y = 0;+ f& G2 G* \0 V* h) \$ I% {. N
- z = 0;2 ~; K! I4 k0 J$ p: r) Z+ v3 b
- for (n = 0; n <= 3; n++)' \( k; }- `. J0 E1 [6 U0 M5 W
- { A- x, N2 d" m0 Q
- temp_2 = inb[n];, c! i* s8 y& b
- y = (temp_2 << (n * 8)) | y;
" o1 _6 A2 `7 b8 }2 l+ k - temp_2 = inb[n + 4];
- P7 b+ J& l" y- n - z = (temp_2 << (n * 8)) | z;
& P, M- `5 A$ M8 { - }* G/ F+ |* A) D. M
. Z& H# @( ~& k( p- c9 O- ' d1 {1 J7 c% Q/ t3 t5 v" A
- n = 32;5 |& d8 u! @* K
" @' L* N! k. p# o- while (n > 0)
; O: D/ y3 B8 U9 w+ g - {
+ K0 e# H1 N- y2 V( n/ o - sum = cnDelta + sum;2 V+ D0 l- i; r; W% F
- 8 Q& `' \6 e# |7 G7 _+ {! h$ W
- /*temp = (z << 4) & 0xFFFFFFFF;( C: g# `+ U, ]1 N
- temp = (temp + a) & 0xFFFFFFFF;9 Z; Q9 n W# Q: T
- temp_1 = (z + sum) & 0xFFFFFFFF;$ Q, E0 t; ]( }6 f
- temp = (temp ^ temp_1) & 0xFFFFFFFF;
8 w/ w! X! }% L9 V6 Q; I - temp_1 = (z >> 5) & 0xFFFFFFFF;
6 t7 a( |! D1 o; R - temp_1 = (temp_1 + b) & 0xFFFFFFFF;8 W0 i4 q3 c! Y1 n
- temp = (temp ^ temp_1) & 0xFFFFFFFF;/ }4 U. i0 D0 P% L( X r2 E
- temp = (temp + y) & 0xFFFFFFFF;
0 Z& r- n4 E R l" { - y = temp & 0xFFFFFFFF;*/. o7 y9 \- C: |/ q0 `: u; E w
- y += ((z << 4) + a) ^ (z + sum) ^ ((z >> 5) + b);* ]; t* j9 D; C4 m5 B& H8 p3 A
- 8 C& d1 B/ u) I8 t; K& ^; |$ w
- /*temp = (y << 4) & 0xFFFFFFFF;& @+ w7 v) x! m( N; I. b
- temp = (temp + c) & 0xFFFFFFFF;; [1 w" X* ^; H4 J+ ^
- temp_1 = (y + sum) & 0xFFFFFFFF;
, d6 u X0 V( U1 \ - temp = (temp ^ temp_1) & 0xFFFFFFFF;
* P0 m# b7 Q [2 w - temp_1 = (y >> 5) & 0xFFFFFFFF;
1 }' d. K7 E7 [! l3 j9 M3 K - temp_1 = (temp_1 + d) & 0xFFFFFFFF;
1 `6 e% b1 E2 \ - temp = (temp ^ temp_1) & 0xFFFFFFFF;
/ I6 m( _) w( K' s! j - temp = (z + temp) & 0xFFFFFFFF;
1 j. {6 y( \% i6 ~2 ~4 Z - z = temp & 0xFFFFFFFF;*/- R' B# Z) \: G) O8 V+ D/ u! J; j
- z += ((y << 4) + c) ^ (y + sum) ^ ((y >> 5) + d);
' i) L" W. n/ m - n = n - 1;* ?/ [5 N: j4 }/ @9 D
- V1 G: T4 k" u8 d- }
p8 z [! O7 X' i
" b8 m5 s9 ]( Q- for (n = 0; n <= 3; n++)
( X0 Q* ~5 K7 a8 ]0 r0 `" U - {
) C0 k; t0 U/ x! m% k - outb[n] = System.Convert.ToByte((y >> (n * 8)) & 255);
7 F3 I9 _4 R, |3 x; x3 X7 j% F - outb[n + 4] = System.Convert.ToByte((z >> (n * 8)) & 255);) f) I, e( {5 S4 {! `
- }
6 z$ Z4 Z- N2 r" ~ w6 l - ! X, Q0 Q$ e- n$ b6 D6 u- M
- }! i* ]9 K) K) b; c1 J z
. Z& R/ b' O6 R- public void DeCode(byte[] inb, byte[] outb, string Key)
6 {: K; Z" d% p4 W - {; c; D1 M+ S0 T& d( z
, \) d! g/ h0 b4 M9 q; M" Z- UInt32 cnDelta, y, z, a, b, c, d, temp_2;- F; r% ?7 Q8 y) W5 {
- UInt32[] buf = new UInt32[16];
8 `, P' `; o* q: x, V - int n, i, nlen;5 F# t+ y4 x% F7 l1 _5 q
- UInt32 sum;$ ~7 m% R+ L% i% T
- //UInt32 temp, temp_1;
# C" m. b) r5 v! a6 r5 f- b- u- ` - string temp_string;, n- t0 o3 ~* T. U
! u& V e+ u) e* i$ M' ]- : W( A% J! x1 m1 N+ a/ v; r3 u0 ^
- cnDelta = 2654435769;2 {2 S% |$ o3 ^6 T, t+ F! z
- sum = 0xC6EF3720;
H1 A ~) n2 u# q. _4 ^
+ i8 L& G+ m9 i$ d! y x- nlen = Key.Length;
3 e0 ~7 m8 s' c4 u/ c+ ?% F - i = 0;
, y2 X# Q! U. }! v( ^) b: G: { - for (n = 1; n <= nlen; n = n + 2)
! o0 G# t1 i5 ~: e$ y& q - {1 k8 t( a) T( l; r6 c
- temp_string = Key.Substring(n - 1, 2);, l* d7 V( `+ C
- buf[i] = HexToInt(temp_string);
8 m. t1 y* J5 t0 M( s) l - i = i + 1;
r9 m' M# g! T' M2 [, o - }/ s0 i2 E& d( S$ o' A: D
- a = 0; b = 0; c = 0; d = 0;
! T6 _3 m; G- X - for (n = 0; n <= 3; n++)
1 M9 @) ~; L- J# o - {" u/ a& Z8 I- `( O
- a = (buf[n] << (n * 8)) | a;% o0 ^6 m4 l _8 K2 `
- b = (buf[n + 4] << (n * 8)) | b;. R/ I* F. J' N: W0 U- A. e" {
- c = (buf[n + 4 + 4] << (n * 8)) | c;
; u/ Q$ b9 V6 h% ?. p* m - d = (buf[n + 4 + 4 + 4] << (n * 8)) | d;( X. _+ {; f! O/ U# P
- }9 L+ M# Z* O9 S X
8 \) ~( S/ {# W# m/ s
# _8 @: K' `( E( B, J7 u
" i$ ]0 A" M' |/ q; n+ [- y = 0;5 x( q8 i2 N% r& z t, e
- z = 0;
7 J) x8 _. p- g. P* {7 [. L% [ - for (n = 0; n <= 3; n++)
; ~" i7 R$ M( u' z2 V8 F - {
4 |0 I# D! H! C - temp_2 = inb[n];! d7 N9 j7 C3 H* @& b: n9 X
- y = (temp_2 << (n * 8)) | y;
1 K4 K3 W+ ]/ P5 W- Q - temp_2 = inb[n + 4];" p5 h& }/ D, m5 u5 I( `: a
- z = (temp_2 << (n * 8)) | z;( |& o1 V; l: V
- }
6 r$ G+ r/ X n+ l5 e/ g. W+ ` - 2 H* {2 x, @% F
- : A' q5 Y7 T% x0 \5 x, s/ V$ n! c
- n = 32;0 i i: L- T3 X% O
- 6 P/ n5 q a& u: R0 j) w
- while (n-- > 0)
4 P* X( g8 S( U( S9 M" y* Q; O - {
8 h) Y( Q5 k9 X# E* u) F$ p - z -= ((y << 4) + c) ^ (y + sum) ^ ((y >> 5) + d);
% ]& ^$ W$ f$ h' k- l6 n$ u - y -= ((z << 4) + a) ^ (z + sum) ^ ((z >> 5) + b);8 k( V( p3 p; X9 r' X* S' y
- sum -= cnDelta;
1 n2 A4 j1 A9 g( M
9 x% G5 J: q3 G$ K% [* B- }3 ?- E: [) j( w
- & \; [9 g$ y2 K% O8 r
- for (n = 0; n <= 3; n++)
- A5 `* d* J4 I9 Q3 F - {. c2 g( X2 f' Q
- outb[n] = System.Convert.ToByte((y >> (n * 8)) & 255);
4 u: O8 m5 Z: ~ y2 n - outb[n + 4] = System.Convert.ToByte((z >> (n * 8)) & 255);
F3 l: F# e) N/ H4 { - }
, Q9 y' A# F) `( ? - 3 `, A4 A3 w. \: Z, ~7 O, P
- }
0 j. \7 z" ?2 d9 ~! p: `
% ]% T- k$ _3 T5 t
0 s3 R: j+ U$ g9 w( { F' V3 R( Y- public string StrEnc(string InString, string Key)//使用增强算法,加密字符串5 a- N# i! a& y* a- S+ q; O
- {
! f0 c9 Z4 \( a1 C. a/ r5 p8 i - }8 r* |% z: h$ j2 z& C, F
- byte[] b, outb;
. m1 K' q- H$ X - byte[] temp = new byte[8], outtemp = new byte[8];
& z7 P5 H' {) Z; @2 F1 t0 e7 [ - int n, i, nlen, outlen;2 R: V/ W' y" N; [& U8 @
- string outstring;$ U& O# Y: x) d j8 [
- ' d5 J) I% [% n' g. C1 U
- : O9 p: {) V" L3 T }$ d
- nlen = lstrlenA(InString) + 1;. P3 c% M* S: M" Z
- if (nlen < 8)6 D4 h6 v. m* z+ E3 q6 x
- outlen = 8;
5 f, p+ m; ?0 K: ?. y. p3 S/ l- W - else
a9 x, A( U* b3 A) ] - outlen = nlen;
; `0 w4 p; m K E2 P - b = new byte[outlen];
. u4 K* `! W2 x! i( G* b" p0 g - outb = new byte[outlen];
# f$ I! ~( X7 Q( T: [
: b9 S2 u( p. R, Z- CopyStringToByte(b, InString, nlen);
! s: ^# @) m# _1 V$ t - . W. Y+ M# H( S6 _1 E8 f/ \ s
- b.CopyTo(outb, 0);2 t" A" w- a) @6 I6 a) T
- # [: F) O0 G) s5 A- k
- for (n = 0; n <= outlen - 8; n = n + 8)/ N6 @! q) B+ j, w( f4 b! b
- {
2 b" K Q T4 @$ A. M - for (i = 0; i < 8; i++) temp[i] = b[i + n];
0 t) i9 h" U" o/ N - EnCode(temp, outtemp, Key);5 {! Z) k2 y: N3 ]- Z, l! }
- for (i = 0; i < 8; i++) outb[i] = outtemp[i];
2 Q( J5 F% I) R* j - }
) z8 b7 v3 d% s
1 C5 a, A% Z5 M( N- outstring = "";( ^# [8 f) [$ I7 b
- for (n = 0; n <= outlen - 1; n++)
3 H* Y2 k* q$ Q5 T" J - { M# Z4 [! f; ~; W9 l
- outstring = outstring + outb[n].ToString("X2");0 S2 @% a% ~$ q) V8 m/ G
- }
, ~4 @ G% m6 D# }3 g1 N8 J - return outstring;; q5 x, I: c- A
- }
- g. \6 r: X, Q0 o0 h - public string StrDec(string InString, string Key) //使用增强算法,加密字符串, N- T9 n: A$ E$ K1 `0 Y
- {3 S% k$ G7 h, D
- byte[] b, outb;. W& w6 G7 b% o# O- k* B
- byte[] temp = new byte[8], outtemp = new byte[8];8 ]. [% Y. Y* n8 }# ^# v r
- int n, i, nlen, outlen;
5 v! X) a: a5 O* P& h. g$ B9 W; } - string temp_string;
4 P% o' }5 L# u0 u0 E+ y; P - StringBuilder c_str;% y0 n8 Y( Z* ~# V
- 8 _% F5 j/ j8 x2 e8 P
- 3 b0 h y: L+ w% h
- nlen = InString.Length;3 E+ ^! V6 I! W- U# z+ y
- if (nlen < 16) outlen = 16;
) b+ ~+ S; k4 o6 ?+ T6 C - outlen = nlen / 2;
2 X! B$ }$ g/ {! C U+ w% B1 [ - b = new byte[outlen];8 g2 F- S1 O r3 P) a& W
- outb = new byte[outlen];
. Q T6 v+ c% w! e - 0 M5 X/ J* g7 t6 k* C
- i = 0;
; {* p8 F4 @' ^ - for (n = 1; n <= nlen; n = n + 2)8 O% P) c" [' z6 Y0 t5 L$ j) ?# A
- {
3 M. [/ j9 J; V8 C% V+ W6 P - temp_string = InString.Substring(n - 1, 2);
& k/ }8 J( U- H# J! p. K - b[i] = System.Convert.ToByte(HexToInt(temp_string));
- e: s) w+ t3 @7 G: c8 j. } - i = i + 1;
- V2 a7 V \/ W9 @; G - } Y7 K5 v5 s. X$ [
q/ O8 x9 t8 @1 w- b.CopyTo(outb, 0);
# T# V6 Q1 j+ F - / N* M* ~ Q3 _" e5 h0 N& h7 u
- for (n = 0; n <= outlen - 8; n = n + 8)
) G! h- R" X7 w - {2 ^ A. z# }# M3 o6 O5 C2 y
- for (i = 0; i < 8; i++) temp[i] = b[i + n];2 k0 K$ a5 D; r: f' m8 @: a* L
- DeCode(temp, outtemp, Key);8 S' u Z( M% z/ G) h( G
- for (i = 0; i < 8; i++) outb[i] = outtemp[i];; ? Y) u7 ?( l( ~
- }
( t' P4 x* I0 O- A - 6 J6 j7 A, f1 g6 o9 {
- c_str = new StringBuilder("", outlen); @+ p/ k/ F4 h
- CopyByteToString(c_str, outb, outlen);
+ M8 _7 B8 V# d% i- F( {' Y9 V - return c_str.ToString();3 l4 k h; K: `
- 5 Q% T6 x- |, H6 f/ N& `7 Q
- }
h& o: m+ O/ k5 d4 g1 a
: D& b0 k3 A3 \+ G" D
6 n5 _! C0 e; P6 D+ ]- }
复制代码
& 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" ?
|
|