c#加密:一、加密概述和windows数据保护
一、c#加密方式概览
密钥数量 | 速度 | 强度 | 备注 | |
File.Encrypt | 0 | 快 | 由用户密码确定 | 在文件系统支持下透明地保护文件内容 。密钥是隐式从登录用户的凭据中得到的。 |
windows数据保护 | 0 | 快 | 由用户密码确定 | 使用隐式生成的密钥对字节数组进行加密和解密 。 |
散列 | 0 | 快 | 高 | 单向 (不可逆的) 转换 。用于存储密码 ,对比文件以及检查数据错误 。 |
对称加密 | 1 | 快 | 高 | 用于普通的加密/解密。使用相同的密钥进行加密或解密 。 可用于保护传输中的信息 。 |
公钥加密 | 2 | 慢 | 高 | 使用不同的密钥进行加密和解密。用于交换传输消息中的对 称加密密钥,或用于文件的数字签名 。 |
.NET Framework中System.Security.Cryptography.Xml命名空间内的类型对创建和验证基于XML的签名提供了支持。同时System.Security.Cryptography.X509Certificates命名空间对数字证书提供了支持。
二、windows数据保护
1、File.Encrypt(String) 方法
File.Encrypt方法是将某个文件加密,使得只有加密该文件的帐户才能将其解密。
使用这个方法,可以对Encrypt文件进行加密,以便只有用于调用此方法的windows帐户才能对文件进行解密。 使用 Decrypt 方法对方法加密的文件进行解密 Encrypt 。
查看微软的方法说明。
只有能够使用 NTFS 加密文件系统 (EFS) 的 Windows 平台才支持此 API。 在非 Windows 系统、Windows Home Edition 系统或非 NTFS 驱动器上使用此项的任何尝试都会导致 PlatformNotSupportedException 或 NotSupportedException ,具体取决于情况。
不建议在 .NET Core 中使用此 API;包含它是为了实现移动到 .NET Core 但仍显式面向 Windows 的应用程序的可移植性。
参考代码如下。
File.WriteAllText("text_file1.txt", "");
File.Encrypt("text_file1.txt");
File.AppendAllText("text_file1.txt", "小猫咪abc");
运行代码会生成如下图带锁的文件。
并且windows会弹出如下提示让备份密码,免得windows系统或账户出现问题,文件永久访问不了的情况。
点击这个提示,会弹出如下窗口,可以根据自己的情况考虑是否备份,如果取消掉,则重启电脑后在操作会再次给出提醒。
2、Windows数据保护API
File.Encrypt中加密使用的密钥是用当前登录用户的密码生成的。这种隐式生成的密钥还可以结合Windows数据保护API对字节数组进行加密。数据保护API定义在Protected-Data类中。该类型中只有两个静态方法:
public unsafe static byte[] Protect(byte[] userData, byte[] optionalEntropy, DataProtectionScope scope)
public unsafe static byte[] Unprotect(byte[] encryptedData, byte[] optionalEntropy, DataProtectionScope scope)
optionalEntropy参数中的数据会添加到密钥中,从而增强其安全性。而Data-ProtectionScope枚举参数可以选择CurrentUser或者LocalMachine。若使用CurrentUser则密钥会从当前登录用户的凭据中生成;若使用LocalMachine,则会使用一个本机范围的密钥,而该密钥对所有用户都是共享的。因此LocalMachine的密钥提供的保护相对较弱。但这种方式适用于Windows服务或那些可能运行在不同账户下的应用程序。
代码示例:
byte[] data = { 25, 36, 44, 5, 6 };
byte[] entropy = { 25, 1 };
byte[] encrypted = System.Security.Cryptography.ProtectedData.Protect(data, entropy, System.Security.Cryptography.DataProtectionScope.CurrentUser);
byte[] temp = System.Security.Cryptography.ProtectedData.Unprotect(encrypted, entropy, System.Security.Cryptography.DataProtectionScope.CurrentUser);
Windows数据保护可以在攻击者获得计算机完全访问权限后仍提供中等程度的安全保护。而保护的强度取决于用户密码的强度。LocalMachine只能够防范那些获得了有限的物理或电子访问权限的攻击者。
相关文章
- Windows下Nginx的启动、停止等命令&Nginx 配置多域名&windows下设置Nginx开机自动启动
- C# 代码重启windows服务
- C#实现控制Windows系统关机、重启和注销的方法
- C#winforms实现windows窗体人脸识别
- 《C#高级编程》学习笔记----c#内存管理--栈VS堆
- [C#]MemoryStream.Dispose之后,为什么仍可以ToArray()?
- C# DataSet.RejectChanges 方法
- C#中如何比较2个string类型的日期大小?
- C# WinForm中 让控件全屏显示的实现代码
- C#中comboBox控件的一些基本用法小结
- 【原创】机器学习之PageRank算法应用与C#实现(2)球队排名应用与C#代码
- windows server 2008 安装Microsoft ActiveSync 6.1提示缺少一个Windows Mobile设备中心所须要的Windows组件
- VS项目出现WINDOWS.H already included. MFC apps must not #include <Windows.h>
- C#中调用Windows API的要点 .
- (27)C#访问SQLite数据库
- (7)C#的this关键字的三种用法
- C#中windows访问共享文件夹会用到的代码
- C#读取Windows系统中的已经安装的程序并卸载软件
- C# 调用Windows API实现两个进程间的通信
- Windows命令行使用FTP——windows下自带ftp命令
- c++与c#混合编程
- C# 语言程序设计笔记
- C#创建Windows窗体应用程序实例3【个人信息调查】
- C#创建Windows窗体应用程序实例8【通用对话框】
- C#创建Windows窗体应用程序实例9【菜单设计】
- C#创建Windows窗体应用程序实例10【目录管理】
- C#创建Windows窗体应用程序实例11【文件管理】
- C#中的运算符和异常处理
- C#调用Windows API实现自定义打印纸张大小