分为两种,代码访问安全,基于角色的安全性。

代码访问安全。是代码告诉.net框架,自己(代码)正确执行,需要的权限,.net框架手动分配代码可执行操作方面的权限,代码可列出调用自己需要的权限集合。
基于角色的安全。是根据用户身份,决定是否可访问资源。如windows用户
实现加密。.net框架的CryptoStream类,可用于加密所有输入/输出(I/O)的流和后备存储模型。
下面具体看这3点。
  • 使用代码访问安全
各种权限,已经在.net通过类定义了。如读写文件目录、windows事件目录等。
请求运行代码的最小权限。例如在代码中用特性指定SecurityAction.RequestMinimum包含FileOPermissionAttribute的ALL,用特性指定叫做声明性安全,使用Permission对象的实例指定叫做强制性安全,这种安全只在根据运行时才知道的信息(例如待打开文件的名称)分配权限时才有必要。
代码组。用一个条件,把不同的代码段分组。例如,all code、application directory。
权限集。权限的集合。例如,Nothing、everythiing。
设置权限。有两个工具用来设置权限,1是命令行的代码访问安全策略工具caspol.exe,2是微软管理控制台(microsoft management console)中的工具,在开始菜单-管理工具-Microsoft.Net Framwork Configuration Tool,这个用起来更方便,这里可增删权限集,改权限集中的权限,可增删代码组,设代码组,就是在这里选择一段代码,分配一个权限集。设置权限能从企业(enterprise)、计算机(machine)、用户(user)这3个级别设置,应用程序域只能在代码中设置,而且只能从上级缩小权限。代码属于同级别多个代码组时,取各代码组相加的权限。默认情况下,企业级和用户级都是允许一切,由计算机级控制权限。
查看分配给了代码哪些权限。即查看指定代码组的权限。因有4级权限,设置权限时,可设置查看到哪级权限为止,即每个代码组的levelfinal,例如在计算机的代码组设置了这个属性,就只查看企业级和计算机级,各级别都有的权限,代码才有,如果调用代码的代码没有对应权限,也不能执行。有工具查看权限,用向导,运行库安全策略-计算程序集。
请求运行代码的可选权限。可在代码中用特性设置。代码没有可选权限时,虽然会产生安全异常,但会继续执行。
请求权限集。上述都是请求单个权限,可使用permissionSetAttribute特性,请求.net的内置权限集。
拒绝权限。代码能告诉clr不想拥有的权限。可通过特性设置,与授予不同的是加了个参数UnRestricted=true。被授予对应权限时,将停止运行。
要求权限。当使用自定义权限时,代码可对调用自己的代码,要求调用代码有若干权限。也是通过特性设置。如果是内置权限,.net已默认要求了调用代码需要有对应权限。
  • 使用基于角色的安全性
基于使用代码的windows用户,来分配权限,即根据当前使用代码的用户所在的windows用户组,判断执行哪些代码。开发了基于角色的,可用于开发独立于windows登录系统的自己的登录系统。
    使用两个接口
IIdentity用WindowsIdentity对象实现,代表正在运行当前代码块的用户,可查看用户名和身份验证方法。
IPrincipal用windowsPrincipal对象实现,建立在WindowsIdentity对象上,代表正在运行当前代码用户的安全背景,包括用户的身份和所属的角色。windowsPrincipal对象告诉clr应该分配给代码哪些基于角色的权限。
    验证当前用户所在用户组
windowsidentity wi = windowsidentity.getcurrent();
windowspricipal wp = new windowspricipal(wi);
if (wp.isinrole(windowsbuiltinrole.poweruser())//isinrole方法,windowsbuiltinrole.poweruser枚举

{

}
else
{
}
    也可使用PricipalPermission类或PricipalPermissionAttribute特性查看,用特性时,如果符合特性说明的当前用户属于指定用户组,执行代码,否则,抛出一个安全性异常。可使用PricipalPermissionAttribute类的Name属性查看当前用户的登录名。
  • 加密
    加密方式
对称加密(私钥加密),拥有私钥,即可解密加密文件,为了增大猜测私钥的难度,私钥用各种对称算法生成。稍复杂的一种是解密时需要私钥和初始化向量(IV)。
非对称加密(公钥加密),有一对公钥和私钥,告知对方公钥,用来加密消息,自己持有私钥,用来解密消息。破解起来,比对称加密难得多,公钥和私钥用非对称算法生成。
处理数字签名(验证消息源),哈希值(验证消息是否已被非法修改)。这两种这里不介绍,在.net框架文件的”加密服务“有介绍。
对称加密和非对称加密的使用过程。使用非对称加密,要求在计算加密消息上花费比对称加密多得多的工作量,可以综合使用这两种加密方式,平衡安全性和计算量。具体过程是,A生成一对公钥和私钥,公布给B公钥;???;A用私钥解密B发来的对称密钥和IV,???
    使用对称加密,加密一个文件
这个文件可以是待保存到的本地文件(加密后保存到filestream),或待通过网络传送的文件(加密后保存到networkstream)。.net框架使用基于流的方法加密,用CryptoStream对象管理加密。
using system.security.cryptography;
....
filestream fsout = file.create(@"本地目录和文件名");
tripleDESCryptoServiceProvider tdes = new tripleDESCryptoServiceProvider ();//创建一种加密算法提供者,并生成密钥
CryptoStream cs = new CryptoStream(fsOut, tdes.createEncryptor(),CryptoStreamMode.Write);//创建加密算法提供者对应的加密管理器,这个管理器是个流对象,同时指定这个加密流对象对应的,在加密后保存文件的流,设置为写入加密后的信息。
streamWriter sw = new streamWriter(cs);//格式化加密流的输出。
sw.write(".....");
sw.flush();
sw.close(();
filestream fsKey = ???//读取密钥。
//保存密钥到本地文件。
BinaryWriter bw = new BinaryWriter(fsKey );
bw.write(tdes.key);
bw.write(tdes.IV);
bw.flush();
bw.close();
...
    解密一个经过对称加密的文件
同样使用CryptoStream对象。
...
filestream fsKey = file.read(@"本地目录和文件名");//读取密钥。
binaryReader br = new binaryReader(fsKey);//格式化输出读取的密钥
tripleDESCryptoServiceProvider tdes = new tripleDESCryptoServiceProvider ();//创建一种加密算法提供者
//改写密钥和初始常量成读取出来的。因创建时自动生成一个,所以说改写。
tdes.key = br.readBytes(24);
tdes.IV= br.readBytes(8);
filestream fsIn = file.openRead(@"本地目录和文件名");//读取被对称加密的文件
CryptoStream cs = new CryptoStream(fsIn, tdes.createEncryptor(),CryptoStreamMode.Read);//创建加密算法加密管理器,设置为解密fsIn,tdes中有对应的密钥和初始常量。
SrteamReader sr = new SrteamReader(cs);//用来格式化输出加密管理器解密的文件内容。
console.writeLine(sr.readToEnd());
sr.Close();
...
    使用非对称加密
非对称加密一般用于处理小量数据而不是数据流,所以可以直接调用实现类的方法来执行加密和解密。对称加密一般用于处理数据流。
...
RSACryptoServiceProvider rsa = new RSACryptoServiceProcvider();
Byte[] testData = {待加密数据1,待加密数据2}; 
Byte[] encryptedData = rsa.Encrypt(testData , false) ;//使用非对称算法提供者的方法,加密数据。严格来说,使用了哪一种或哪几种算法加密,使用多种算法时的顺序,都是保密的,不然可以通过程序解密。
Byte[] decryptedData = rsa.Decrypt(testData.false);//使用非对称算法提供者的方法,解密数据。
...

随机推荐

  1. ArrayList 原理(1)

    ArrayList是Java List类型的集合类中最常使用的,本文基于Java1.8,对于ArrayList的实现原理做一下详细讲解. (Java1.8源码:http://docs.oracle.c ...

  2. Java Magic. Part 3: Finally

    Java Magic. Part 3: Finally @(Base)[JDK, magic, 黑魔法] 转载请写明:原文地址 英文原文 系列文章: -Java Magic. Part 1: java ...

  3. hadoop 链接 mysql

    数据在hadoop服务器上,需要导入mysql 可以直接在hadoop上操作 要知道 mysql的 账号 密码 host 步骤: 进入shell 输入:  mysql -u 'name' -p'pas ...

  4. IDEA kotlin 配置

    修改 idea 安装目录 bin 目录 下 idea.properties   文件修改idea.max.intellisense.filesize=50000 避免proto 生成的java文件不被 ...

  5. 大型运输行业实战_day02_1_数据库设计与powerDesigner使用

    1.安装powerDesigner 1. 傻瓜式的安装 2.在安装的过程中选择地区后才可以点击同意和下一步 3.安装地址,建议直接把c改为d 4.其他选项直接下一步 2.使用powerDesigner ...

  6. np.eye()

    今天在完成深度学习的相关编程作业的时候,发现代码中出现了一个关于np.eye()的函数,这个函数的用法非常的简单,但是在预制的代码中,这个函数的用法并非单单制造一个对角矩阵,而是通过其来将一个labe ...

  7. 有几个Pass,对象就会绘制几次

    在每个SubShader内部可以包含多个,至少一个Pass.有几个Pass,对象就会绘制几次.在编写时我们应该尽量控制Pass的数量. 在Pass中包含Cg/HLSL程序片段,在其中编写vertex ...

  8. 给dede添加栏目图片和栏目描述

    有的时候我们希望调用栏目时把栏目的图片和描述调出来,但dede好像没有提供栏目图片这个功能,而栏目的描述也是给meta:Description使用的,不是很方便.   所以我们需要自已给dede添加图 ...

  9. 配置Spring框架编写XML的提示

    1. 步骤一:先复制, http://www.springframework.org/schema/beans/spring-beans.xsd 2. 步骤二:搜索XML Catalog,点击Add按 ...

  10. VBA json parser[z]

    http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html VB-JSON: A Visual Basic 6 (VB ...