安全第一:.NET加密技术指南(1)

安全|加密

摘要:
  信息安全是计算机应用的首要问题之一,但目前关于.NET加密功能的范例却少之又少。有鉴于此,本文探讨了在.NET平台下加密/解密文件的一般过程,并提供了一个加密/解密文件的工具。

  Web服务以不容置疑的态势迅速发展,促使许多单位开始考虑.NET之类的开发平台。但是,出于对安全问题的担心,一些单位总是对采用新技术心存顾虑。好在有许多成熟的安全和网络技术,例如虚拟私有网络(VPN)和防火墙等,能够极大地提高Web服务应用的安全和性能,让开发者拥有选择安全技术的自由,而不是非得使用尚在发展之中的XML安全技术不可。

  虽然安全是信息系统的首要问题,但有关.NET安全和加密工具的范例却少之又少。看看大多数.NET书籍的目录,找不到任何有关安全的题目,更不用说关于密码系统的探讨了。

  有鉴于此,本文将介绍如何在VB开发中运用.NET的加密和密钥生成类,提供一个可用来加密和解密文件的工具Cryption。有了这个工具,你就可以在硬盘上保存各种机密文件,例如所有的密码/用户名字信息、收支文件、以及其他想要保密的信息,还可以加密那些通过Internet发送的文件。加密技术的用途非常广泛,你可以进一步定制本文提供的工具满足某些特殊需要,例如增加批处理能力等。

一、两类重要的安全威胁

  攻击和泄密是计算机面临的两大安全威胁。攻击可能来自病毒,例如它会删除文件、降低机器运行速度或引发其它安全问题。相比之下,泄密往往要隐蔽得多,它侵害的是你的隐私:未经授权访问硬盘文件,截取通过Internet发送的邮件,等等。泄密还可能伴随着攻击,例如修改机密文件等。

  针对泄密的最佳防范措施就是加密。有效的加密不仅杜绝了泄密,而且还防范了由泄密引发的攻击。加密技术有时还用于通信过程中的身份验证——如果某个用户知道密码,那么他应该就是那个拥有这一身份的人。

  然而必须说明的是,没有一种防范泄密的安全技术是绝对坚固的,因为密码有可能被未经授权的人获得。

二、使用.NET加密功能的前提

  首先,要想使用.NET的安全功能,就必须用Imports语句引入加密用的包。试验本文涉及的任何代码之前,请在VB代码窗口的顶部加入下列Imports语句:

Imports System.IO
Imports System.Text
Imports System.Security.Cryptography

  第二,美国政府过去限制某些加密技术出口。虽然这些限制不再有效,.NET框架在Windows的出口版本中禁用了“高级”加密技术。如果你的Windows不带高级加密能力,可以从微软网站下载更新包:对于Windows 2000,安装Service Pack 2包含的High Encryption Pack;对于NT,安装Service Pack 6a。对于Windows ME、95、98的用户,IE 5.5也包含了High Encryption Pack。

三、加密/解密工具概况

  本文提供的工具可用来加密和解密文件,如果你急着给一些文件加密,只需直接启动本文后面提供的工具即可。

  这个工具提供了一个用来输入文件名字的文本框和一个输入密钥的文本框,通过便捷的用户界面提供加密、解密和密钥生成功能。在图一中,上方的文本框用来输入待加密/解密文件的名字;下面的文本框用来输入8个字符的密码。执行加密操作之后将生成一个新的文件,这个经过加密的文件和原始文件在同一目录下,文件名字也和原始文件的一样,但加上了“xx”后缀,例如,假设原始文件是MyFile.txt,则加密得到的文件是MyFilexx.txt。

  加密好之后,原始文件不一定非删除不可,但一般来说最好删除,因为加密的根本目的就是为了隐藏原始文件的数据。如果要从加密后的文件恢复出原始文件,在上面的文本框中输入MyFilexx.txt,然后提供密码,Cryption工具将创建一个与原始文件一样的MyFile.txt文件。也就是说,Cryption把文件名字后面的“xx”看作是要求解密密文的标志。

  注意:加密文件之后如果忘记了用来加密该文件的密码,再想恢复出原始文件就不可能了。当然,这与密码本身的复杂程度有关,要想保证文件的安全,最好采用较复杂的密码,例如混合运用字母、数字和特殊字符(如“$”符号等)。

  .NET提供的加密技术不止一种,不过本文讨论的主要是对称加密。对称加密也称为私有密钥加密,它的特点是加密和解密用的是同一个密钥(实际上是同一种算法),解密方和加密方都有责任保障密码的安全(对于公用密钥、不对称加密,密钥一共有两个,其中一个密钥是公开的,这是当前公认最有效的加密技术,但就速度而言要比对称加密算法慢不少)。

  在正式利用.NET加密类加密文件之前,首先必须从用户提供的密码生成一个密钥。密钥可以利用Hash函数生成,Hash函数把用户的密码字符串转换成一组类似随机数序列的、无意义的数据,这组数据可作为密钥使用,在加密过程中对原始数据进行唯一性变形处理。

  例如,用密钥加密数据的一种办法是把原始数据的ASCII码加上密钥的ASCII码:

密钥:ab = ASCII: 97, 98
数据:merry = ASCII: 109, 101, 114, 114, 121

  把这组数据的ASCII码加上密钥的ASCII码(必要时重复使用密钥),得到的加密结果是:

97 98 97 98 97
+109 +101 +114 +114 +121
206 199 211 212 218

  对于同样的数据,Hash算法总是生成同样的结果(这就是说,对于同一个密码,同一Hash算法总是生成相同的bit序列)。实际上,在本文提供的代码中,利用.NET的SHA1CryptoServiceProvider类的ComputeHash方法可以验证这一点,例如,对于同一个输入参数morph,任何时候该方法总是返回下面的结果:124,230,93,253,197,206,136,72。因此,如果有人知道密码以及生成密钥的算法,他也可以轻松地推算出密钥。

时间: 2024-08-03 09:26:47

安全第一:.NET加密技术指南(1)的相关文章

安全第一:.NET加密技术指南(2)

安全|加密 四.执行加密/解密 .NET加密技术要求密钥有确定的长度,例如,DES(Data Encryption Standard)函数要求密钥的长度是64位,Rijndael则要求128.192或256位长度的密钥.密钥越长,加密强度越高.对于DES之外的加密算法,查询LegalKeySizes属性即可得到它允许的密钥长度,包括MinSize(支持的最小密钥长度).MaxSize(最大密钥长度).SkipSize(增量).SkipSize表示密钥最大长度和最小长度之间可用长度的间隔,例如,R

区块链技术指南.

区块链技术指南 邹均 张海宁 唐屹 李磊 等著 图书在版编目(CIP)数据 区块链技术指南 / 邹均等著. -北京:机械工业出版社,2016.11 ISBN 978-7-111-55356-4 I. 区- II. 邹- III. 电子商务-支付方式-指南 IV. F713.361.3-62 中国版本图书馆CIP数据核字(2016)第268750号 区块链技术指南 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037) 责任编辑:高婧雅 责任校对:殷 虹 印 刷: 版 次

探秘移动安全系列文章其三:加密技术

本文讲的是 :  探秘移动安全系列文章其三:加密技术  ,  [IT168 评论]编者按:移动支付在刚刚过去的春节掀起了2016中国互联网第一阵风潮,随之而来的是安全圈的一片质疑声.首先我们需要强调的是产品体验与安全机制是两个层面的问题.春节前夕,笔者发起了关于移动安全话题的讨论,从企业安全和用户安全角度,移动设备本身带来的便捷性就是一把双刃剑,如果说移动设备和移动应用提供给开发者无数的机遇,那么也正意味着有更多的诸如后门之类的可乘之机开放给了攻击者. 安全本身是一个悖论,针对移动安全笔者针对传

将Java加密技术同Windows结合起来

公共钥匙加密技术需要一个空间来存储数字证书和私钥.通过将钥匙和证书存储到一个文件中(称为keystore),Java Security Architecture实现了独立于平台的加密技术. Microsoft Windows把钥匙和证书存储到Windows注册表和文件系统中.这就是说,在Windows系统上运行安全的Java程序的用户必须在Java和Microsoft的钥匙和证书库之间输入和输出钥匙和证书.好消息是,你可以"哄骗"Java应用程序通过Microsoft本地函数来运用Mi

php pki加密技术(openssl)详解

本篇文章是对php中的pki加密技术(openssl)进行了详细的分析介绍,需要的朋友参考下   复制代码 代码如下: <?php//pki加密//使用pki加密需要开启 openssl扩展 //php.ini extension = php_openssl.dll扩展 /*pki模式是 * 公钥加密,私钥解密: * 私钥加密,公钥解密: */ //私钥加密,公钥解密 //客户端 //$data数据 $data = 'abcd'; //获取私钥 $priv_key_id $priv_key_id

浅谈 PHP 中的多种加密技术及代码示例

同样是一道面试答错的问题,面试官问我非对称加密算法中有哪些经典的算法? 当时我愣了一下,因为我把非对称加密与单项散列加密的概念弄混淆了,所以更不用说什么非对称加密算法中有什么经典算法,结果当然也让面试官愣了一下,所以今天就花点时间说说PHP中的信息加密技术 信息加密技术的分类 单项散列加密技术(不可逆的加密) 属于摘要算法,不是一种加密算法,作用是把任意长的输入字符串变化成固定长的输出串的一种函数 MD5 string md5 ( string $str [, bool $raw_output

PHP中的多种加密技术及代码示例解析_php技巧

对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法.有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以 从加密密钥中推算出来.而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法. 信息加密技术的分类 单项散列加密技术(不可逆的加密) 属于摘要算法,不是一种加密算法,作用是把任意长的输入字符串变化成固定长的输出串的一种函数 MD5 string md5 ( string $str [, bool $raw_outp

总结Java常用到的六个加密技术和代码_java

加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些资料将加密直接分为对称加密和非对称加密). 双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文.而单向加密只是对信息进行了摘要计算,不能通过算法生成明文,单向加密从严格意思上说不能算是加密的一种,应该算是摘要算法吧. 具体来说: 系统必须可用,非数学上不可译码. 系统不一定要保密,可以轻

深度|加密技术如何对付量子计算机

导读:你可能认为量子计算机还属于科幻范畴,但近几十年它就有可能变成现实,而其超强的计算机能力也会对现有的加密技术构成威胁.那有没有加密方法能抵御量子计算机攻击呢?连线的这篇文章就对此做了科普,并指出这不仅是技术问题,更需要安全与效率的平衡. 今年8月的时候,美国国家安全局(NSA)在其网页上更新了一段不起眼的内容,他们计划对现在政府和军方加密数据的方式更新,以期能够阻挡来自量子计算机的攻击.NSA的发言人表示,量子计算机能够带来更新更强的计算能力,显然现有的安全措施和加密方式无法承受来自这种设备