温故知新,.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 ...
随机推荐
- 1. Java概述
1.1 Java语言背景介绍(了解) 语言:人与人交流沟通的表达方式. 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言. Java语言是美国Sun公司(Stanford University ...
- ART-TEMPLATE的核心语法
模板引擎语法 核心方法 // 基于模板名渲染模板 template(filename, data); // 将模板源代码编译成函数 template.compile(source, options); ...
- [DB] Spark SQL
概述 基于Spark,兼容Hive 集成在Spark中,不需单独安装 提供统一的数据访问方式 结构化的数据类型:JDBC.JSON.Hive.Parquet(Saprk SQL 默认数据源) 支持标准 ...
- Linux性能监控与分析之--- CPU
Linux性能监控与分析之--- CPU 望月成三人关注 2016.07.25 18:16:12字数 1,576阅读 2,837 CPU性能指标 用户进程使用CPU的比率 系统进程使用CPU的比率 W ...
- tar -zxvf file.tar.gz //解压tar.gz
http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0. ...
- Markdown 使用文档
MarkDown 简介 Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用.看到这里请不要被「标记」.「语言」所迷惑,Markdown 的语法十分 ...
- UCOSII中的主栈扩展
听陈*均说 UCOSII源代码中有这样的机制 当某个TASK的栈不够用.访问越界时 会自动调用系统生成的备用扩展栈区 但这样也有风险 备用扩展栈区如果被击穿则会造成更大的错误,可能会导致程序跑飞,如果 ...
- 1.3Linux 终端命令格式
Linux 终端命令格式 目标 了解终端命令格式 知道如何查阅终端命令帮助信息 01. 终端命令格式 bashcommand [-options] [parameter] 说明: command:命令 ...
- SystemVerilog 激励发生器
simulator(激励发生器) 主要来的职责是模拟与DUT相邻设计的接口协议,只需要关注如何模拟接口信号,时期能够以真实的接口协议来发送激励给DUT. simolator不应该违反协议,但是不约束于 ...
- 面试官问我:如何在 Python 中解析和修改 XML
摘要:我们经常需要解析用不同语言编写的数据.Python提供了许多库来解析或拆分用其他语言编写的数据.在此 Python XML 解析器教程中,您将学习如何使用 Python 解析 XML. 本文分享 ...