温故知新,.Net Core遇见Digital Signature(MD5/RSA/SM),微服务签名机制设计
什么是数字签名(Digital Signature)
数字签名(Digital Signature)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
在一封信中,文末的签名是为了表示这封信是签名者写的。计算机中,数字签名也是相同的含义:证明消息是某个特定的人,而不是随随便便一个人发送的(有效性);除此之外,数字签名还能证明消息没有被篡改(完整性)。
什么是MD5
消息摘要算法版本5(Message Digest Algorithm 5)它是一种Hash算法。作用是为了信息安全。再具体点,MD5值就是一串128bit的数据。MD5的核心是通过算法把任意长度的原始数据映射成128bit的数据。这一点跟CRC类似,都是把一串数据经过处理,得到另一个固定长度的数据。
什么是RSA
RSA公钥加密算法是美国计算机学家RonRivest、AdiShamir和LeonardAdleman于1977年提出,是最早的公钥加密算法之一,在全球范围被广泛使用。随着密码技术和计算机技术的发展,目前1024位RSA算法已经被证实存在被破解的风险,美国NIST(国家标准技术研究院)在2010年要求全面禁用1024位RSA算法,升级到2048位RSA算法。此外,斯诺登事件爆发后,其泄露出的机密文档显示,RSA算法中可能存在NSA的预置后门,对RSA算法的安全性产生巨大影响。
RSA是Rivest-Shamir-Adleman算法的缩写。它是目前最常用的公钥加密算法。RSA公钥密码系统的原理是:根据数论,找到两个大素数比较简单,但是分解其乘积因式非常困难,因此该乘积可以公开用作加密密钥。
RSA算法安全性:RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,也并没有从理论上证明破译。RSA的难度与大数分解难度等价。因为没有证明破解RSA就一定需要做大数分解。RSA算法的安全强度随着其密钥长度的增加而增加。但是,密钥越长,加密和解密所花费的时间就越长。因此,有必要综合考虑受保护信息的敏感性,攻击者破解的成本以及系统所需的响应时间,尤其是在商业信息领域。
RSA运算速度:由于所有计算都是大数,因此无论是通过软件还是硬件来实现,RSA最快的情况都比DES慢几倍。速度一直是RSA的缺陷。通常只用于少量数据加密。RSA的速度比相同安全级别的相应对称加密算法慢大约1000倍。
什么是SM
SM2算法由国家密码管理局于2010年12月17日发布,是我国自主设计的公钥密码算法,基于更加安全先进的椭圆曲线密码机制,在国际标准的ECC椭圆曲线密码理论基础上进行自主研发设计,具备ECC算法的性能特点并实现优化改进。
生成随机MD5密钥
/// <summary>
/// 生成随机MD5密钥
/// </summary>
private string CreateAppSecret()
{
#region CreateAppSecret
var str = Guid.NewGuid().ToString();
MD5 md5 = MD5.Create();//实例化一个md5对像
// 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
StringBuilder stringBuilder = new StringBuilder();
// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
for (int i = 0; i < s.Length; i++)
{
stringBuilder.Append(s[i].ToString("x2"));
}
return stringBuilder.ToString();
#endregion
}
生成.Net/Java版RSA密钥
/// <summary>
/// 生成.Net/Java版RSA密钥
/// </summary>
private (string, string) CreateRSASecret(string seedKey, bool isFormat = true, bool isJava = false)
{
#region CreateRSASecret
var generator = new RsaKeyPairGenerator();
var seed = Encoding.UTF8.GetBytes(seedKey);
var secureRandom = new SecureRandom();
secureRandom.SetSeed(seed);
generator.Init(new KeyGenerationParameters(secureRandom, 2048));
var pair = generator.GenerateKeyPair();
string privateKey;
if (isJava)
{
var privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(pair.Private);
byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetEncoded();
privateKey = Convert.ToBase64String(serializedPrivateBytes);
Console.WriteLine("Private Key:" + privateKey);
}
else
{
var twPrivate = new StringWriter();
PemWriter pwPrivate = new PemWriter(twPrivate);
pwPrivate.WriteObject(pair.Private);
pwPrivate.Writer.Flush();
privateKey = twPrivate.ToString();
Console.WriteLine("Private Key:" + privateKey);
}
var twPublic = new StringWriter();
PemWriter pwPublic = new PemWriter(twPublic);
pwPublic.WriteObject(pair.Public);
pwPublic.Writer.Flush();
var publicKey = twPublic.ToString();
Console.WriteLine("Public Key:" + publicKey);
if (isFormat)
{
privateKey = privateKey?.Replace("-----BEGIN RSA PRIVATE KEY-----", "")?.Replace("-----END RSA PRIVATE KEY-----", "")?.Replace("\r\n", "");
publicKey = publicKey?.Replace("-----BEGIN PUBLIC KEY-----", "")?.Replace("-----END PUBLIC KEY-----", "")?.Replace("\r\n", "");
}
return (publicKey, privateKey);
#endregion
}
参考
- 什么是数字签名和证书?
- 公开密钥加密
- 数字签名是什么?
- 什么是RSA算法?
- 国密算法你了解多少?
- SM2算法对比RSA算法,有哪些优势?
- NetCore 生成RSA公私钥对,公钥加密私钥解密,私钥加密公钥解密
- .net core 常用rsa 加签类
温故知新,.Net Core遇见Digital Signature(MD5/RSA/SM),微服务签名机制设计的更多相关文章
- 【.net core】电商平台升级之微服务架构应用实战
一.前言 这篇文章本来是继续分享IdentityServer4 的相关文章,由于之前有博友问我关于微服务相关的问题,我就先跳过IdentityServer4的分享,进行微服务相关的技术学习和分享.微服 ...
- AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)
上一步我们创建好CoreApi 接下来在框架中加入 Swagger 并发布 到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore 比 ...
- Asp.Net Core微服务再体验
ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行 ...
- Asp.Net Core微服务初体验
ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行 ...
- 我眼中的ASP.NET Core之微服务
### 前言 前几天在博客园看到有园友在分享关于微软的一个微服务架构的示例程序,想必大家都已经知道了,那就是[eShopOnContainers](https://github.com/dotnet- ...
- 【微服务目录】.NET Core 微服务介绍
介绍: 写这篇文章有多方面的原因,第一当然是为了以后自己可以随时翻阅,第二也算是一种积累吧.因为有些东西你弄个之后,过了很长时间不用,可能会有些忘却,但是你因为以前弄个吧,有不是那种小白,需要去找示例 ...
- (1)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 什么是微服务架构,.netCore微服务选型
开发工具:VS2017 .Net Core 2.1 什么是微服务?单体结构: 缺点: 1)只能采用同一种技术,很难用不同的语言或者语言不同版本开发不同模块: 2)系统耦合性强,一旦其中一个模块有问题, ...
- (1).NET CORE微服务 Micro-Service ---- 什么是微服务架构,.netCore微服务选型
开发工具:VS2017 .Net Core 2.1 什么是微服务?单体结构: 缺点:1)只能采用同一种技术,很难用不同的语言或者语言不同版本开发不同模块:2)系统耦合性强,一旦其中一个模块有问题,整个 ...
- (11)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Thrift高效通讯 (完结)
一. 什么是 RPC Restful 采用 Http 进行通讯,优点是开放.标准.简单.兼容性升级容易: 缺点是性能略低.在 QPS 高或者对响应时间要求苛刻的服务上,可以用 RPC(Remote P ...
随机推荐
- Docker 中运行 ElasticSearch 和 Kibana
ElasticSearch 是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口:Kibana 是一个开源的分析和可视化平台,可以搜索,查看. ...
- Mac 无密码 SSH 登录服务器
Mac 无密码 SSH 登录服务器,只需要简单三步,不再需要记住账号密码,快速进入服务器 第一步,生成密钥对 在当前用户下创建.ssh目录 mkdir ~/.ssh 使用命令ssh-keygen生成密 ...
- [Java] Tomcat 部署
背景 免费web服务器,Apache组织发布,Sun公司开发 基于Java,平台无关 可部署Web应用,为客户端提供服务 使用 启动 运行 \tomcat\bin\startup.bat 出现&quo ...
- python基础之面向对象(一)(概念、实例、魔法方法)
一.面向对象概念理解 1.面向对象和面向过程 面向过程:核心过程二字,过程即解决问题的步骤,就是先干什么后干什么 基于该思想写程序就好比在这是一条流水线,是一种机械式的思维方式 优点:复杂的过程流程化 ...
- USB中TOKEN的CRC5与CRC16校验(神奇的工具生成Verilog实现)
USB2.0IP设计 最近,在学习USB2.0IP的设计,其中包含了CRC校验码的内容,之前学习千兆以太网曾经用到过CRC32校验(https://www.cnblogs.com/Xwangzi66/ ...
- 【ArcGIS遇上Python】ArcGIS Python批处理入门到精通实用教程目录
目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 Python语言是目前很火热的语言,极大的促进了人工智能发展.你知道在ArcGIS中也会有python的身影吗?事实上,在ArcG ...
- 十一、.net core(.NET 6)搭建ElasticSearch(ES)系列之ElasticSearch、head-master、Kibana环境搭建
搭建ElasticSearch+Kibana环境 前提条件:已经配置好JDK环境以及Nodejs环境.如果还未配置,请查看我的上一篇博客内容,有详细配置教程. 先下载ElasticSearch(以下文 ...
- python字典转bytes类型字典
python字典转bytes类型字典import base64 import json 1. a={"Vod":{"userData":"{}&quo ...
- Python+Selenium - 文件上传
如下图,从系统点击上传功能,打开到这种如下图页面的才适合本文介绍的处理方法 处理方法一 pywinauto库 优点:可以选择多个文件,路径中有中文也支持 缺点:只能Windows平台使用 安装 pip ...
- 前端基础——js数据类型及判断方法
一.数据类型 我们通常熟知的数据类型有六种,包括5种基本数据类型(Number, String, Boolean, Undefined, Null)和一种引用数据类型(Object).ES6又新增了一 ...