马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
加密协议有哪些
加密协议分为对称加密和非对称加密。
对称加密就是将信息使用一个密钥进行加密,解密时使用同样的密钥,同样的算法进行解密。
非对称加密,又称公开密钥加密,是加密和解密使用不同密钥的算法,广泛用于信息传输中。
对称加密协议
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();
- .......................
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |