深入理解加密和签名的区别

加密的目的是防止在传输过程中,数据被泄露

签名的目的是防止在传输过程中,数据被篡改

非对称加密算法(如RSA)正确的使用方法是:

1.1 公钥加密,私钥解密。(防止数据泄露)

1.2私钥签名,公钥验签。(防止数据篡改)

1.1 公钥加密,私钥解密。

私钥和公钥的关系,相当于钥匙和锁的关系。

私钥=钥匙,公钥=锁,私钥只有一把自己保存,而公钥锁可以复制很多把

你女朋友给你发送信件时,把你的锁(公钥)给她,让她把信件锁起来(加密)后发给你,你再拿你的钥匙(私钥)去解密,得到的信件可以证明这是你女朋友传过来的(防止数据被泄露

1.2私钥签名,公钥验签。

同样的例子,你给你女朋友写信,为了证明这封信的内容是你写的,你需要给你的信加上一个签名,其方法是:通过哈希算法对信件进行摘要,将摘要用你的私钥进行签名(私钥签名),如果有人篡改了信件,则摘要一定会不同,你将签名后的摘要和信件一同发出,你女朋友在收到摘要和签名后,使用你之前给的公钥及约定好的哈希算法对摘要进行解密(公钥验签),得到解密后的摘要,用同样的方法对发送来的信件也提取出摘要,两个摘要一对比,相同的话则说明数据是你想要发的内容(防止数据被篡改

在这个例子中,对数据进行了签名,但在传输过程中没有对数据加密,即不能保证这个数据是你发出的

也就是说,签名与加密完全是两个概念,也不是必须一起都实现才安全,要根据需求而定。

例如,我传输了一个下单信息:买一杯奶茶,这个信息并不是什么机密,但是要防止被人篡改改成:买2杯可乐,所以只需要对内容做签名防篡改就可以了,并不需要加密。

参考

接口安全:谈谈加密与签名的区别_加密和签名的区别-CSDN博客

私钥,公钥,数字签名的区别? - 知乎

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第一部分C#语言基础 第1章C#类型基础 1.1值类型和引用类型 1.1.1值类型 1.1.2引用类型 1.1.3简单类型 1.1.4装箱和拆箱 1.2对象判等 1.2.1 引用类型判等 1.2.2简单值类型判等 1.2.3复杂值类型判等 1.3对象复制 1.3.1 浅度复制 1.3.2深度复制 1.4不可变类型 1.4.1从类型设计谈起,Class还是Struct 1.4.2数据不一致的问题 1.4.3 常量性和原子性 1.4.4避免外部类型对类型内部的访问 1.5本章小结 第2章C#中的泛型 2.1理解泛型 2.1.1 为什么要有泛型 2.1.2类型参数约束 2.1.3泛型方法 2.2泛型与集合类型 2.2.1 避免隐式的装箱和拆箱 2.2.2编译时的类型安全 2.2.3使用泛型的一个小技巧 2.3本章小结 第3章C#中的委托和事件 3.1理解委托 3.1.1 将方法作为方法的参数 3.1.2将方法绑定到委托 3.1.3委托与接口 3.2事件的由来 3.2.1 更好的封装性 3.2.2 限制类型能力 3.3委托的编译代码 3.4.NET框架中的委托和事件 3.4.1 示例说明 3.4.2 Observer设计模式简介 3.4.3 实现示例的Observer设计模式 3.4.4.NET框架中的委托与事件 3.5委托进阶 3.5.1 为什么委托定义的返回值通常都为void 3.5.2如何让事件只允许一个客户订阅 3.5.3获得多个返回值与异常处理 3.6订阅者方法超时的处理 3.7委托和方法的异步调用 3.8不使用委托实现Observer模式 3.8.1设计思想概述 3.8.2 Observer模式的接口定义 3.8.3 Observer模式的实现 3.8.4推模式和拉模式 3.8.5推模式和拉模式的区别 3.9本章小结 第4章对象的筛选和排序 4.1对象的筛选 4.1.1基于拼装SQL的筛选 4.1.2基于对象的筛选 4.1.3事件探查器 4.2对象的排序 4.2.1 简单排序——对固定属性的默认排序 4.2.2高级排序——多个属性组合排序 4.2.3 页面调用 4.3本章小结 第5章LINQ 5.1 LINQ预备知识 5.1.1泛型和委托 5.1.2 隐式类型的局部变量 5.1.3 匿名类型 5.1.4扩展方法 5.1.5 匿名方法和Lambda表达式 5.2集合 5.2.1理解集合 5.2.2创建集合类 5.2.3实现IEnumerable< t>接口 5.3 LINQ查询 5.3.1 LINQ to Objects 5.3.2查询表达式 5.3.3延迟加载 5.3.4混合使用LINQ to Objects 5.4 LINQ查询运算符 5.4.1 返回IEnumerable< t> 5.4.2返回其他序列类型 5.4.3返回序列中元素 5.4.4返回标量值 5.4.5其他方法 5.5本章小结 第二部分.NET框架 第6章认识.NET平台 6.1引子 6.2 CIL——公共中间语言 6.3 BCL和FCL 6.3.1 BCL——基类库 6.3.2 FCL——框架类库 6.4 CTS——公共类型系统 6.5 CLS——公共语言规范 6.6 CLR——公共语言运行时 6.6.1程序集概述 6.6.2运行程序集 6.7 cLl——公共语言基础 6.8本章小结 第7章程序集 7.1程序集详探 7.1.1程序集模块 7.1.2清单和元数据 7.1.3程序集资源 7.2强名称程序集 7.2.1 非强名称程序集的问题 7.2.2强名称的定义 7.2.3为程序集赋予强名称 7.2.4 防篡改和数字签名 7.2.5全局程序集缓存 7.2.6延迟签名 7.3本章小结 第8章流和序列化 8.1文件 8.1.1 不同视角下的文件 8.1.2位、字节和字节数组 8.2流 8.2.1 关于流的类比 8.2.2使用流进行文件复制 8.2.3 流的类型体系 8.3序列化 8.3.1基本操作 8.3.2事件响应 8.3.3 自定义序列化过程 8.4本章小结 第9章.NET中的加密和解密 9.1加密和解密的相关概念 9.1.1散列运算 9.1.2对称加密 9.1.3非对称加密 9.1.4数字签名 9.1.5综合实现 9.1.6证书机制 9.2.NET对加密和解密的支持 9.2.1散列运算 9.2.2对称加密和解密 9.2.3非对称加密 9.3本章小结 第10章网络编程 10.1网络编程基本概念 10.1.1 面向连接的传输协议——TCP 10.1.2 即时通信程序的三种模式 10.2基本操作 10.2.1服务端对端口进行侦听 10.2.2客户端与服务端连接 10.2.3服务端获取客户端连接 10.3同步传输字符串 10.3.1 客户端发送,服务端接收并输出 10.3.2服务端回发,客户端接收并输出 10.3 中英文字符大小和文本边界问题 10.4.1 ASCIl、UTF8、Unicode编码下的中英文字符大小 10.4.2文本边界问题 10.5异步传输字符串 10.5.1 服务端的实现 10.5.2客户端的实现 10.5.3程序测试 10.6文件传输 10.6.1订立协议 10.6.2协议处理类的实现 10.6.3客户端发送文件 10.7本章小结 第11章.NET Remoting 11.1理解Remoting 11.1.1 应用程序域基本概念 11.1.2应用程序域的基本操作 11.1.3在默认应用程序域中创建对象 11.1.4在新建应用程序域中创建对象 11.1.5代理和封送 11.1.6传引用封送示例 11.1.7服务程序集、服务端应用程序(域)和客户端应用程序(域) 11.2 Remotin9架构 11.2.1客户端(客户应用程序域) 11.2.2服务端(宿主应用程序域) 11.2.3 Remotin9对象的三种激活方式 11.3 Remotin9程序的基本操作 11.3.1 服务程序集 11.3.2服务端应用程序 11.3.3客户端应用程序 11.3.4程序运行测试 11.4 Remotin9中的传值封送 11.5分离服务程序集元数据和代码实现 11.5.1使用接口分离服务程序集 11.5.2使用“空类”分离服务程序集 11.5.3 使用Soapsuds.exe分离程序集 11.5.4使用工厂方法实现分离 11.6 Remoting中的方法回调 11.6.1远程回调方式说明 11.6.2客户端类型和服务端类型 …… 第12章 在.NET中操作XML 第13章 .NET应用程序配置 第14章 基于角色的安全性 第15章 .NET中的反射 第16章 多线程 第17章 对象生存期与垃圾收集

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值