您的位置:首页 > 大数据 > 人工智能

paip.提升安全性-----时间判断

2012-08-18 00:58 260 查看
paip.提升安全性-----时间判断

常常有这样的情景,我们需要在编码中需要根据时间来执行某段代码,但是这段时间判断代码又不希望被别人看懂..特别是不能出现日期字串,以

防止别人猜明意思

伪码如下:

if( nowtime>"2013.1.1" )

{...........//some code

}

一个比较好的办法是使用magic number,并且不要使用相关的时间函数..如在C#,不要使用DATETIME类...

可以使用WIN32API来取时间,并且转换为LONG型数字来进行判断..

如:

long t= x.getl();

if (t > 63484678861000)

{

//todo

}



这样就避免了代码段被人轻易读懂..这里的MAGIC NUMBER 63484678861000表示一个日期" 2013.1.1"..

getl函数主要如下,这里为了方便阅读,没有混淆加密。。如果在实际应用中,应该对此类方法进行混淆加密

------------------------- 相关代码--------------------------------------------



using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)] //这个如果不加,则返回值全部为0

public class MySystemTime

{

public ushort wYear; //必须设为ushort,如果为INT ,则数据错乱..WIN32API里是INTERGE

public ushort wMonth;

public ushort wDayOfWeek;

public ushort wDay;

public ushort wHour;

public ushort wMinute;

public ushort wSecond;

public ushort wMilliseconds;

}

public class Win32API

{

// [DllImport("User32.dll")]

[DllImport("kernel32.dll")]

public static extern void GetSystemTime(MySystemTime st);

public static long getl()

{

// 是“协同世界时间”(即UTC,也叫做GMT)格式,需要+8个时区

MySystemTime mt = new MySystemTime();

Win32API.GetSystemTime(mt);

int days = mt.wYear * 365 + mt.wMonth * 30 + mt.wDay;

long millsecs = (long)days * 24 * 3600 * 1000 + (long)getHour(mt.wHour) * 3600 * 1000 + (long)mt.wMinute * 60 * 1000

+ mt.wSecond * 1000 + mt.wMilliseconds;

//string s = mt.wYear + pad0left(mt.wMonth.ToString(), 2) + pad0left(mt.wDay.ToString(), 2);

//s += getHour(mt.wHour) + pad0left(mt.wMinute.ToString(), 2) + pad0left(mt.wSecond.ToString(), 2);

//s += pad0left(mt.wMilliseconds.ToString(), 3);

return millsecs;

}

private static int getHour(ushort hour)

{

ushort t = (ushort)(hour + ushort.Parse("8"));

if (t == 24)

t = 0;

return t;

}



private static string pad0left(string ms, int len)

{

string strOrdid = ms;

for (int i = 0; i < len - ms.Length; i++)

{

strOrdid = "0" + strOrdid;

}

return strOrdid;

}

public static long getMagicNum()

{

int days = 2013 * 365 + 1 * 30 + 1;

long millsecs = (long)days * 24 * 3600 * 1000 + (long)getHour(1) * 3600 * 1000 + (long)1 * 60 * 1000 +1 * 1000 + 0;

return millsecs;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: