个人理解c#对称加密 非对称加密 散列算法的应用场景
c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下
对称加密
通过同一密匙进行加密和解密。往往应用在内部数据传输情况下。比如公司a程序 和B程序 。a程序要给B程序发送数据 但是为了防止明文发送 数据被窃取。那么我就定了一个协议传输的数据的byte字节都统一+1 而接收数据的情况下将Byte字节统一-1 然后就能获得正确的 数据(当然这个是一个简单的加密) ,真正应用的加密肯定比这个复杂很多
非对称加密
传输数据的双方有各自的公钥和私钥 公钥对外公开 私钥自己保留,当像B用户发送数据 使用B用户的公钥进行加密 加密的数据只有B用户的私钥可以解密 那么如果在传输过程中 如果消息被截取 那么也破解不了
比如支付操作 a用户输入银行卡 卡号和密码 进行支付 那么在传输过程中 如果别抓包截取数据。是很危险的 。那么统一在客户端将参数信息 通过服务器提供的公钥进行加密。如果在传输过程中被截取
我们都知道https请求在传输过程中数据是安全的
https请求客户端需要安装证书 证书就类似公钥和私钥 客户端发起请求获得服务器的公钥 并将自己的公钥发送给服务器。 在传输过程中都使用双方的公钥进行加密传输 保证了数据的安全性
https请求与普通请求的区别是 https是长连接 同时增加了 双方公钥交换的握手
列子
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
namespace SecureTranferTest
{
class Program
{
/// <summary>
/// 安妮的私匙
/// </summary>
public static System.Security.Cryptography.CngKey anlikey = null;
//安妮的公钥
public static byte[] anlipulicKey = null;
//鲍勃的私匙
public static System.Security.Cryptography.CngKey bobkey = null;
public static byte[] bobpulicKey = null;
static void Main(string[] args)
{
CreateKey();
AnliSendMessage("今天天气很好");//安妮开始向bob发送消息
AnliSendMessage("啦啦啦");//安妮开始向bob发送消息
Console.ReadKey();
}
public static void CreateKey()
{
//以ECDsaP256创建私钥
anlikey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP256);
//根据私钥生成公钥
anlipulicKey = anlikey.Export(CngKeyBlobFormat.EccPublicBlob);
//以ECDsaP256创建私钥
bobkey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP256);
//根据公钥获得私钥
bobpulicKey = bobkey.Export(CngKeyBlobFormat.EccPublicBlob);
}
public static void AnliSendMessage(string message)
{
byte[] rowData = Encoding.UTF8.GetBytes(message); //将发送消息转换成二进制格式
//同annli的私匙生成一个新的随机的密钥对
using (ECDiffieHellmanCng cng = new ECDiffieHellmanCng(anlikey))
{
//通过bob的公钥byte[]获得一个cngKey密钥对象
using (CngKey bobkey = CngKey.Import(bobpulicKey, CngKeyBlobFormat.EccPublicBlob))
{
//通过anli的密钥对与bob的公钥生成一个对称密钥
var sumKey = cng.DeriveKeyMaterial(bobkey);
//创建一个对称加密和解密的(AEC)高级算法实现
using (var aes = new AesCryptoServiceProvider())
{
aes.Key = sumKey; //设置对称加密密钥
aes.GenerateIV();
//生成对称加sh密对象
using (ICryptoTransform encryptor = aes.CreateEncryptor())
{
using (MemoryStream ms = new MemoryStream())
{
//定义一个加密转换流
var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write);
//写入加密初始化向量(IV)
ms.Write(aes.IV, , aes.IV.Length);
//写如传递数据
cs.Write(rowData,, rowData.Length);
cs.Close();//使用完后必须关闭 否则会丢失数据
var data= ms.ToArray();
//安妮向鲍勃发送加密数据消息 加密数据的二进制数据()
Console.WriteLine("安妮向鲍勃发送加密数据消息 加密数据的二进制数据");
BobReceivesData(data);
}
aes.Clear();
}
}
}
}
}
//Bob接收信息
public static void BobReceivesData(byte[] data)
{
Console.WriteLine("鲍勃接收到 并开始解密");
byte[] rowData = null;
//首先读取未加密的初始化向量(IV) 在data里面
//1.通过对称加密高级算法实现AesCryptoServiceProvider 获得IV的长度
using (var aes = new AesCryptoServiceProvider())
{
;//他的操作块二进制长度转换成byte存储的十进制长度
byte[] ivdata = new byte[ivlength];
Array.Copy(data, ivdata, ivlength);
//同bob的私匙生成一个新的随机的密钥对
using (ECDiffieHellmanCng cng = new ECDiffieHellmanCng(bobkey))
{
//通过anni的公钥byte[]获得一个cngKey密钥对象
using (CngKey anikey = CngKey.Import(anlipulicKey, CngKeyBlobFormat.EccPublicBlob))
{
//通过anli的密钥对与bob的公钥生成一个对称密钥
var sumKey = cng.DeriveKeyMaterial(anikey);
aes.Key = sumKey; //设置对称加密密钥
aes.IV = ivdata;
using (ICryptoTransform decryptor = aes.CreateDecryptor())
using (MemoryStream me = new MemoryStream())
{
//定义一个加密转换流
var cs = new CryptoStream(me, decryptor, CryptoStreamMode.Write);
cs.Write(data, ivlength, data.Length - ivlength);//将加密信息进行解密
cs.Close();//一定要关闭 否则将丢失最后一位数据
rowData = me.ToArray();
Console.WriteLine("解密成功 信息为:");
Console.WriteLine(Encoding.UTF8.GetString(rowData));
}
}
}
}
}
}
}
散列算法
同样的字符串 通过散列算法 算出唯一的散列值。 比如md5加密
应用场景 接口防止参数被篡改 参数用md5加密将md5散列算出的字符串提交到服务器 如果服务器也通过散列参数的字符串跟提交的一样 那么代表没有呗篡改
个人理解c#对称加密 非对称加密 散列算法的应用场景的更多相关文章
- 【Java-加密算法】对称加密、非对称加密、单向散列(转)
一提到加密,就会联想到数字签名,这两个经常被混淆的概念到底是什么呢? 加密:加密是一种以密码方式发送信息的方法.只有拥有正确密钥的人才能解开这个信息的密码.对于其他人来说,这个信息看起来就像是一系列随 ...
- HTTPS加密那点事-对称、非对称加密、数字证书
转自:[漫画]https 加密那点事 首先,HTTP协议的缺点:没有对数据进行加密,都是明文传输的.如果要改进这种明文传输的协议,该如何做呢? 对称加密: 在每次发送真实数据之前,服务器先生成一把密钥 ...
- [svc]对称加密/非对称加密细枝末节-如何做到数据传输的authentication/data integrity/confidentiality(私密)
对称/非对称/混合加密的冷知识 数据在互联网上传输,要考虑安全性. 讲到安全,要从三方面考虑: 1.authentication 每一个IP包的认证,确保合法源的数据 2.data integrity ...
- 第十四章 调试及安全性(In .net4.5) 之 对称及非对称加密
1. 概述 本章内容包括:对称及非对称加密算法..net中的加密类.使用哈希操作.创建和管理签名认证.代码访问权限 和 加密字符串. 2. 主要内容 2.1 使用对称和非对称加密 ① 对称加密:使用同 ...
- Java进阶(八)Java加密技术之对称加密 非对称加密 不可逆加密算法
对称加密 非对称加密 不可逆加密算法 根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系). 1 对称加密算法 原理 对称加密算法中,数据加密和解密 ...
- C#.NET中对称和非对称加密、解密方法汇总--亲测可用
C#.NET中对称和非对称加密.解密方法汇总--亲测可用 在安全性要求比较高的系统中都会涉及到数据的加密.解密..NET为我们封装了常用的加密算法,例如:MD5,DES,RSA等.有可逆加密,也有 ...
- DotNet加密方式解析--散列加密
没时间扯淡类,赶紧上车吧. 在现代社会中,信息安全对于每一个人都是至关重要的,例如我们的银行账户安全.支付宝和微信账户安全.以及邮箱等等,说到信息安全,那就必须得提到加密技术,至于加密的一些相关概念, ...
- .NET加密方式解析--散列加密
在现代社会中,信息安全对于每一个人都是至关重要的,例如我们的银行账户安全.支付宝和微信账户安全.以及邮箱等等,说到信息安全,那就必须得提到加密技术,至于加密的一些相关概念,在这里就不说了. 这一次将会 ...
- PKI和加密,散列算法
Day 11-PKI和加密,散列算法 PKI(Public Key Infrastructure公钥基础设施) 1 PKI(Public Key Infrastructure公钥基础设施)回顾学习 - ...
随机推荐
- datatables中的Options总结(1)
datatables中的Options总结(1) 最近一直研究dataTables插件,下面是总结的所有的选项内容,用了帮助学习datatables插件. 这些选项的配置在$().Datatable( ...
- layer.js中layer.tips
<script src="~/Content/js/layer/layer.js"></script> layer.tips('名称不能为空', '#pro ...
- hideSoftInputFromWindow
有的时候会碰到软键盘不好关闭,然后就去调界面代码,发现不行,说到底还是对软键盘不熟悉的原因,软键盘windowSoftInputMode有很多种 如果你默认的activity的模式为默认的,或者sta ...
- Android Weekly Notes Issue #220
Android Weekly Issue #220 August 28th, 2016 Android Weekly Issue #220 ARTICLES & TUTORIALS Manag ...
- Json解析工具的选择
前言 前段时间@寒江不钓同学针对国内Top500和Google Play Top200 Android应用做了全面的分析(具体分析报告见文末的参考资料),其中有涉及到对主流应用使用json框架Gson ...
- iOS sqlite 的各种操作
iOS --SQL的增加.删除.查找.修改 iOS对于数据库的操作:增加.删除.查找.修改 首先需要创建一个数据库:本程序的数据库是在火狐浏览器里的插件里写的微量型数据库 火狐找查找SQLite Ma ...
- MySQL Performance-Schema(三) 实践篇
前一篇文章我们分析了Performance-Schema中每个表的用途,以及主要字段的含义,比较侧重于理论的介绍.这篇文章我主要从DBA的角度出发,详细介绍如何通过Performance-Schema ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
- kvm/qemu/libvirt学习笔记 (1) qemu/kvm/libvirt介绍及虚拟化环境的安装
kvm简介 kvm最初由Quramnet公司开发,2008年被RedHat公司收购.kvm全称基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux的一个内核模块 ...
- pitch yaw roll是什么
虚拟现实 三维空间的右手笛卡尔坐标如图1所示. 图1 在航空中,pitch, yaw, roll如图2所示. pitch是围绕X轴旋转,也叫做俯仰角,如图3所示. yaw是围绕Y轴旋转,也叫偏航角,如 ...