分享
 
 
 

如何在.NET框架里面保护数据(上)

王朝c#·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

我们都知道数据使我们计算机处理的基本元素,现在是信息时代,所以数据也是在爆炸,我们的计算机每时每刻都在处理这些数据,对于一个企业来说这些信息也许就是他们的命根子,比如:某公司的客户资源意外的泄漏出去那么我想对该企业来将是最大的损失.因此计算机的安全性尤为重要,这里我们不靠率OS的安全隐患或者OS的安全问题,这些留给黑克们去研究好了.今天我要介绍的是.NET里面我们如何保护我们的数据,这样我们首先想到的就是加密数据,是的加密数据是一种最有效也是最直接的保护数据的办法.好了废话就不多说了,下面我们利用.NET里面命名空间下的System.Security.Cryptography如果想了解该命名空间的详细信息请浏览MSDN帮助.

在通常情况下我们将用户名和密码存在数据库中,登陆数据库是需要密码的,所以我们认为我们的数据(用户名和密码)是安全的,是这样吗?我认为基本上是这样,但是如果对于一些人来说这个密码不起作用(有恶意的内部人员),解决这个问题的办法我们使用Hash加密的方法,这种加密的方法得到的密文是不能被返回来的,也就是说有了密文是不能得到明文的,我们就把这种密文存于数据库中即使你打开看也无济于事,为了可以让程序识别出正确的用户,我们用同样的方法给用户输入的密码(明文)加密以后再和数据库重的密码比较这样来判断是否为合法用户.前面是说了一个简单的例子,下面我们看看在.NET中是怎么实现这种加密方法的.首先我们要非常感谢微软给我们提供的框架,它几乎想到了我们要做的每一件事情,在上面提到的命名空间里就有我们需要的类来完成我上面说的功能.

不可逆的加密算法(Hash算法):

我们可以在该命名空间下看到一个SHA1的类和MD5的类,这也是我们最长用的两种不可逆的加密Hash算法,首先我们先要介绍一下SHA1接下来是MD5.

SHA1:

首先我们看看他的描述: The hash is used as a unique value of fixed size representing a large amount of data. Hashes of two sets of data should match if the corresponding data also matches. Small changes to the data result in large, unpredictable changes in the hash.

The hash size for the SHA1 algorithm is 160 bits.

其次我们将要用SHA1CryptoServiceProvider来实例化一个SHA1的实例,然后利用ComputeHash方法计算他的Hash码具体的代码如下:

private HashAlgorithm mhash;

private string HashString(string Value,string hashDes){

byte[] bytValue;

byte[] bytHash;

mhash = SetHash(hashDes);

// 将原始字符串转化成字节的形式

bytValue = System.Text.Encoding.UTF8.GetBytes(Value);

// 计算Hash结果同时返回结果给bytHash

bytHash = mhash.ComputeHash(bytValue);

mhash.Clear();

// 返回Hash结果的Base64的编码

return Convert.ToBase64String(bytHash);

}

上面使用了一个工厂方法SetHash,改方法的具体内容如下:

private HashAlgorithm SetHash(string hashScription){

HashAlgorithm retHash;

switch(hashScription){

case "SHA1":{

retHash = new SHA1CryptoServiceProvider();

break;

}

case "MD5" :{

retHash = new MD5CryptoServiceProvider();

break;

}

default :{

retHash = new SHA1CryptoServiceProvider();

break;

}

}

return retHash;

}

因为我们在该应用程序中定义了一个全局的对象mhash所以我们在HashString方法里面可以直接赋值.这个工厂方法可以让我们得到一个HashAlgorithm的对象,这样可以将推迟对象实例化的时间,让程序更具灵活性详细的信息参看(http://www.csdn.net/Develop/read_article.asp?id=21036).利用这个工厂方法我们不仅可以的到SHA1的对象还可以得到MD5的对象(这取决于子类).我们将根据输入的描述信息来确定实例化那个类,如果没有输入则默认为SHA1对象.

可以看出利用.NET框架很容易的就实现了SHA1和MD5的加密工作(.NET越来越丰富我们做的工作越来越少,是不是有一天我们就没事做了? J).上面的方法有一个很致命的弱点,就是如果有人用算法来穷举那么他用同样的方法加密的字符不是同样可以通过系统的验证吗?毕竟这是一种公共的加密方法嘛.解决这个问题也有一些办法,比如我们在Hash的时候不止是Hash密码,我们可以给密码中添加一些其他的信息比如:手记号码,住址等等,这样即使知道算法和密码如果不知道那个附加信息还是白玩.当然了要是你还是想用.NET框架完成这个工作也很容易,微软想到了这点,我们可以利用System.Security.Cryptography.RNGCryptoServiceProvider来作到,它是一个随机数字产生器,当然为了可以让合法的人登陆系统,我们需要将这些随机数也要存入数据库,至于存在哪里,当然是一个最不起眼的地方了.还有的做法就是将密码异或再加密等等等,只要你能想出来的都可以.

上面介绍的是Hash的加密算法以及简单的实现方法,下面将要介绍一下可以还原(也就是双向的Two-way)的加密算法.(未完待续…)

参考文献: http://msdn.microsoft.com/

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有