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