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

原创 2003年10月22日 01:24:00

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

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

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

我们可以在该命名空间下看到一个SHA1的类和MD5的类,这也是我们最长用的两种不可逆的加密Hash算法,首先我们先要介绍一下SHA1接下来是MD5.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

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

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

springmvc+ibatis框架搭建(xml配置)

搭建环境需要的jar包: commons-logging.jar, log4j-1.2.15.jar, servlet-api.jar, spring.jar, spring-web.jar, sp...
  • huangwenjie11
  • huangwenjie11
  • 2014年02月10日 09:16
  • 732

Android手机替代笔记本出差实战之处理受保护的工作表(excel)

爪机用哪个办公软件好?我以前也做过一个简单评测   用图片说公道话,Android能处理Office文档和平板电脑替代笔记本出差实战案例   现在的这篇并不是什么评测的文章,这是个前几天解决的一个真实...
  • luozhuang
  • luozhuang
  • 2013年09月21日 18:17
  • 3356

如何在没有安装NetFramework的电脑上运行.net程序

.net程序通常只能在安装了Net.Framework的电脑上运行,如果想在没安装Net.Framework的电脑上运行,就得在打包程序的时候,在“系统必备”对话框里选择“从与我的应用程序相同的位置下...
  • chzhe
  • chzhe
  • 2010年03月13日 16:41
  • 5929

网络编程之路(第二天) 结构化参数传递

HRESULT Fire_Initialize( IUnknown * pUnit, LONG lResult, BSTR lpszDesc...
  • markqian86
  • markqian86
  • 2009年03月04日 10:48
  • 352

UAP 数据操纵 总结

工作需要,最近对UAP学习的总结,放在这里和大家一起交流,学习。 1.viewcontroller.js层定义按钮的相应事件: me._AgreeButton_onclick = function...
  • shuang1457
  • shuang1457
  • 2016年08月12日 14:45
  • 200

Android的Volley框架的搭建以及使用

本人开发所用的工具为Android studio。对于Volley网络请求框架的搭建以及具体使用,在这里进行一个简单的总结,记录,方便自己日后的查看以及提高。 首先你需要下载一个volley的jar包...
  • qq_21139343
  • qq_21139343
  • 2016年07月14日 14:28
  • 404

如何在.NET里面调用win32 API

下面是示例在C#里面调用win32api中的 CreateFile 和 CloseHandle 这两个函数。using System;using System.IO;using System.Runt...
  • kwanhong
  • kwanhong
  • 2005年09月15日 13:28
  • 2333

$.ajax json数据传递方法

前台代码: 无标题页 .show{ display:block;} .hide{ display:none;} //这个方法把ajax方法封装一下,方便调用。 ...
  • Lyncai
  • Lyncai
  • 2014年04月12日 12:01
  • 1025

如何在myeclipse里面搭建ssh框架

一建立一个web  project   如图:
  • power_girl
  • power_girl
  • 2014年03月07日 10:58
  • 369

在CSDN上发布视频blog

1. 打开youku,找到视频的id 2. 替换如下代码的id部分 3. 将代码放入csdn的markdown编辑器中 4. done...
  • QXK2001
  • QXK2001
  • 2016年05月03日 23:48
  • 421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在.NET框架里面保护数据(上)
举报原因:
原因补充:

(最多只允许输入30个字)