什么是数字签名(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
}

参考

温故知新,.Net Core遇见Digital Signature(MD5/RSA/SM),微服务签名机制设计的更多相关文章

  1. 【.net core】电商平台升级之微服务架构应用实战

    一.前言 这篇文章本来是继续分享IdentityServer4 的相关文章,由于之前有博友问我关于微服务相关的问题,我就先跳过IdentityServer4的分享,进行微服务相关的技术学习和分享.微服 ...

  2. AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)

    上一步我们创建好CoreApi 接下来在框架中加入 Swagger  并发布  到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore  比 ...

  3. Asp.Net Core微服务再体验

    ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行 ...

  4. Asp.Net Core微服务初体验

    ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行 ...

  5. 我眼中的ASP.NET Core之微服务

    ### 前言 前几天在博客园看到有园友在分享关于微软的一个微服务架构的示例程序,想必大家都已经知道了,那就是[eShopOnContainers](https://github.com/dotnet- ...

  6. 【微服务目录】.NET Core 微服务介绍

    介绍: 写这篇文章有多方面的原因,第一当然是为了以后自己可以随时翻阅,第二也算是一种积累吧.因为有些东西你弄个之后,过了很长时间不用,可能会有些忘却,但是你因为以前弄个吧,有不是那种小白,需要去找示例 ...

  7. (1)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 什么是微服务架构,.netCore微服务选型

    开发工具:VS2017 .Net Core 2.1 什么是微服务?单体结构: 缺点: 1)只能采用同一种技术,很难用不同的语言或者语言不同版本开发不同模块: 2)系统耦合性强,一旦其中一个模块有问题, ...

  8. (1).NET CORE微服务 Micro-Service ---- 什么是微服务架构,.netCore微服务选型

    开发工具:VS2017 .Net Core 2.1 什么是微服务?单体结构: 缺点:1)只能采用同一种技术,很难用不同的语言或者语言不同版本开发不同模块:2)系统耦合性强,一旦其中一个模块有问题,整个 ...

  9. (11)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Thrift高效通讯 (完结)

    一. 什么是 RPC Restful 采用 Http 进行通讯,优点是开放.标准.简单.兼容性升级容易: 缺点是性能略低.在 QPS 高或者对响应时间要求苛刻的服务上,可以用 RPC(Remote P ...

随机推荐

  1. macos python安装mysqlapi集合

    记录一下,接了一个python2 django1.x的项目,很老了导致很多扩展无法安装 os version:macos catalina python version: 2.7.18 而django ...

  2. [bug] Python:“TabError: inconsistent use of tabs and spaces in indentation”

    原因 代码中混用了Tab和4个空格 参考 https://blog.csdn.net/dongdong9223/article/details/82745068

  3. Chm文件阅读软件测试需求

    转发: .Chm文件阅读软件测试需求 . xchm问题太多就不考虑了: kchm是问题少一些 windows打开是乱码就不去考虑 必须在windows打开正常的再在龙芯上打开 1windows打开是乱 ...

  4. ioctl 函数的FIOREAD参数

    在学习ioctl 时常常跟 read, write 混淆.其实 ioctl 是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的. 而read,write 是把数据丢入缓冲区,硬件的驱动从缓冲 ...

  5. 10.11 arping:发送arp请求

    arping命令 是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包检查局域网内所有设备的硬件地址.  arping 命令的参数选项及说明 -c <次数>       ...

  6. pyqt安装

    一.安装PyQt5 pip install PyQt5 二.安装PyQt-tools pip install PyQt-tools *注:mac不需要安装PyQt-tools,能够正常使用,只支持Wi ...

  7. 三:.net core(.NET 6)给swagger添加文档注释详细步骤

    提供swagger文档注释. 0.先给api加上标题注释和返回值注释: 然后,启动见证奇迹: What the hell?没得注释?查看当前自动生成的swagger代码如下: 首先,我们需要对需要注释 ...

  8. BASE理论之思考

    一.什么是BASE理论? BASE理论是对CAP中一致性和可用性权衡的结果,它的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性. BASE理论 ...

  9. Python+Selenium自动化-获取页面信息

    Python+Selenium自动化-获取页面信息   1.获取页面title title:获取当前页面的标题显示的字段 from selenium import webdriver import t ...

  10. GO学习-(9) Go语言基础之切片

    Go语言基础之切片 本文主要介绍Go语言中切片(slice)及它的基本使用. 引子 因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性. 例如: func arraySum(x ...