加密协议有哪些

加密协议分为对称加密和非对称加密。

对称加密就是将信息使用一个密钥进行加密,解密时使用同样的密钥,同样的算法进行解密。

非对称加密,又称公开密钥加密,是加密和解密使用不同密钥的算法,广泛用于信息传输中。

对称加密协议

AES、DES、RC5、RC6等

非对称加密协议

RSA、DSA等

RSA数据加密协议是什么

RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。

RSA加密协议的原理

对极大整数做因数分解。可以在不直接传递密钥的情况下完成解密。可以确保信息的安全性,避免了直接传递密钥所造成的被破解的风险,RSA是由一对密钥来进行加解密的过程,分别称为公钥和私钥.

RSA格式

通常PKCS1密钥对的开始部分为:

-----BEGIN RSA PRIVATE KEY-----或

-----BEGIN RSA PUBLIC KEY-----

而PKCS8密钥对的开始部分为:

-----BEGIN PRIVATE KEY----- 或

-----BEGIN ENCRYPTED PRIVATE KEY----- 或

-----BEGIN PUBLIC KEY-----

这种包含开头和结尾标记的是PEM密钥格式,但在.net中只支持XML格式,可以通过第三方库BouncyCastle,将PEM和XML格式互转

RSA密钥的生成

密钥可以在线生成,推荐选择密钥长度大于等于2024位,因为目前已经破解了接近1024位了。格式选择PKCS1。

在.Net中的应用

.Net中应用

生成私钥RSA对象

点击查看代码
	    var PrivateKey =@"
-----BEGIN RSA PRIVATE KEY-----
...................................
-----END RSA PRIVATE KEY-----
"; //生成RSA私钥对象
var rsa = RSA.Create();
var xmlPriKey = PemPrivateKey(PrivateKey);
rsa.ImportParameters(xmlPriKey);
SecurityKey key2 = new RsaSecurityKey(rsa); //生成JWT密钥,授权
var token = new JwtSecurityToken(
issuer: "GATE",
audience: "API",
expires: exPriseDateTime,
notBefore: DateTime.Now,
claims: claims,
signingCredentials: new SigningCredentials(key2, SecurityAlgorithms.RsaSha256)
); var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
return jwtToken; static RSAParameters PemPrivateKey(string pemPrivateKeyStr)
{
RsaPrivateCrtKeyParameters pemPrivateKey;
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(pemPrivateKeyStr)))
{
using (var sr = new StreamReader(ms))
{
//在.net中只支持XML格式的RSA密钥,所以需要借助第三方库才能识别PEM格式的密钥
var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(sr);
var keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();
pemPrivateKey = (RsaPrivateCrtKeyParameters)keyPair.Private;
}
} var p = new RSAParameters
{
Modulus = pemPrivateKey.Modulus.ToByteArrayUnsigned(),
Exponent = pemPrivateKey.PublicExponent.ToByteArrayUnsigned(),
D = pemPrivateKey.Exponent.ToByteArrayUnsigned(),
P = pemPrivateKey.P.ToByteArrayUnsigned(),
Q = pemPrivateKey.Q.ToByteArrayUnsigned(),
DP = pemPrivateKey.DP.ToByteArrayUnsigned(),
DQ = pemPrivateKey.DQ.ToByteArrayUnsigned(),
InverseQ = pemPrivateKey.QInv.ToByteArrayUnsigned(),
};
return p;
}

.Net Core中应用

生成私钥RSA对象

点击查看代码
var Jwt:Prikey = "去掉开头和结束的标记,以及换行和空格符".replace("\r","").replace("\n","").replace(" ","").replace("BEGIN RSA PRIVATE KEY","").replace("END RSA PRIVATE KEY","");

[AllowAnonymous]
public Task<string> GetToken()
{
var configurationBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
var configuration = configurationBuilder.Build(); List<Claim> claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, "name"));
claims.Add(new Claim("ID", "123456"));
//生成RSA私钥实例
var rsa = RSA.Create(); //在.net core中原生支持PEM格式的密钥 ,ImportRSAPrivateKey 导入私钥
rsa.ImportRSAPrivateKey(Convert.FromBase64String(configuration.GetSection("Jwt:Prikey").Value), out _);
SecurityKey key2 = new RsaSecurityKey(rsa);
var token = new JwtSecurityToken(
issuer: configuration.GetSection("Jwt:Issuer").Value,
audience: configuration.GetSection("Jwt:Audience").Value,
expires: DateTime.Now.AddDays(1),
notBefore: DateTime.Now,
claims: claims,
signingCredentials: new SigningCredentials(key2, SecurityAlgorithms.RsaSha256)
); var jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
return Task.FromResult(jwtToken); }

生成公钥RSA对象

点击查看代码
public void ConfigureServices(IServiceCollection services)
{
....................... var configurationBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json");
var configuration = configurationBuilder.Build();
var rsa = RSA.Create();
var pubkey = File.ReadAllText("Public.key").Replace("-----BEGIN RSA PUBLIC KEY-----", "").Replace("-----END RSA PUBLIC KEY-----", "").Replace("\r", "").Replace("\n", "").Replace(" ", "");
//ImportRSAPublicKey 导入公钥
rsa.ImportRSAPublicKey(Convert.FromBase64String(pubkey), out _);
SecurityKey key2 = new RsaSecurityKey(rsa); services.AddAuthorization(options =>
{ }).AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidAudience = configuration.GetSection("Jwt:Audience").Value,
ValidIssuer = configuration.GetSection("Jwt:Issuer").Value,
IssuerSigningKey = key2
};
}); .......................
} public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
....................... app.UseAuthentication(); app.UseAuthorization(); .......................
}

最新文章

  1. 生产环境中,数据库升级维护的最佳解决方案flyway
  2. asp.net初识
  3. pycharm 2016 注册码
  4. 我的c++学习(5)switch语句详解
  5. oracle—无法启动
  6. java7新特新(一) Try-with-resources (TWR)
  7. ElasticSearch在Azure中的集群配置和Auto-Scale
  8. C# C/S 结构操作Ini系统文件
  9. c#中怎么删除一个非空目录
  10. Windows Minifilter驱动 - 调式 (4)
  11. [转]Python存取XML方法简介
  12. SQL2008无法连接到.,及sa登录失败的总结
  13. kvstore之memcached为存储介质
  14. 【开发技术】eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法
  15. kafka知识体系-kafka设计和原理分析-kafka leader选举
  16. java自定义连接池
  17. AGC 010D.Decrementing(博弈)
  18. Appium环境配置(二)
  19. eclipse安装scala环境
  20. java设计模式 略版

热门文章

  1. 定时调度插件------Longbow.Tasks
  2. drf-day7——认证组件、权限组件、频率组件、过滤排序、分页
  3. 五、pycharm的安装与基本使用
  4. GaussDB(DWS)现网案例:collation报错
  5. 面向对象程序设计(二):C++模板初探
  6. SpringBoot 2.x 在Tomcat8上无法运行,报无法访问错误
  7. 毕设进度更新(真的不知道自己做到哪- - 备忘录性质)+3.19是mavan配置的常见问题
  8. 郁金香 对MFC 编辑框的查看 与更改
  9. [代码审计基础 04]ssrf漏洞的利用&amp;伪协议
  10. springboot AOP配置