公钥私钥 多久过期_关于公钥和私钥的解释说明

一、公钥加密  假设一下,我找了两个数字,一个是1,一个是2。我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥。

我有一个文件,不能让别人看,我就用1加密了。别人找到了这个文件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以用 数字2,就是我的私钥,来解密。这样我就可以保护数据了。

我的好朋友x用我的公钥1加密了字符a,加密后成了b,放在网上。别人偷到了这个文件,但是别人解不开,因为别人不知道2就是我的私钥, 只有我才能解密,解密后就得到a。这样,我们就可以传送加密的数据了。

二、私钥签名 如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知 道我的公钥是1,那么这种加密有什么用处呢?

但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他 解密看是不是c。他用我的公钥1解密,发现果然是c。 这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。 这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。

举例

比如有两个用户Alice和Bob,Alice想把一段明文通过双钥加密的技术发送给Bob,Bob有一对公钥和私钥,那么加密解密的过程如下:

Bob将他的公开密钥传送给Alice。

Alice用Bob的公开密钥加密她的消息,然后传送给Bob。

Bob用他的私人密钥解密Alice的消息。

上面的过程可以用下图表示,Alice使用Bob的公钥进行加密,Bob用自己的私钥进行解密。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JWT(JSON Web Token)的公钥私钥,主要涉及生成签名(签发令牌)和验证签名(验证令牌)两个过程。 1. 生成签名(签发令牌): - 使用私钥对 JWT 的头部和载荷进行数字签名,以确保令牌的完整性和真实性。 - 将签名后的结果添加到 JWT 的头部或载荷中,形成最终的 JWT。 2. 验证签名(验证令牌): - 获取 JWT 中的头部和载荷,并提取签名部分。 - 使用公钥对头部和载荷进行验证,以确认令牌是由合法的签发者签名的。 - 如果验证成功,则说明令牌是有效的。 在实际应用中,生成签名和验证签名的具体实现细节会根据编程语言和库的不同而有所差异。以下是一个示例,使用 C# 和 System.IdentityModel.Tokens.Jwt 库来生成和验证 JWT 的过程: ```csharp using System; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using Microsoft.IdentityModel.Tokens; public class JwtHelper { public static string GenerateToken(string privateKey) { var securityKey = new SymmetricSecurityKey(Convert.FromBase64String(privateKey)); var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256); var tokenHandler = new JwtSecurityTokenHandler(); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim("userId", "123") }), Expires = DateTime.UtcNow.AddDays(1), SigningCredentials = credentials }; var token = tokenHandler.CreateToken(tokenDescriptor); return tokenHandler.WriteToken(token); } public static bool ValidateToken(string token, string publicKey) { var tokenHandler = new JwtSecurityTokenHandler(); var validationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Convert.FromBase64String(publicKey)), ValidateIssuer = false, // 可选,如果需要验证签发者,请将其设置为 true,并提供有效的 Issuer ValidateAudience = false // 可选,如果需要验证受众,请将其设置为 true,并提供有效的 Audience }; try { // 验证令牌 tokenHandler.ValidateToken(token, validationParameters, out _); return true; } catch (Exception) { // 令牌验证失败 return false; } } } ``` 上述代码中,`GenerateToken` 方法用于生成 JWT,其中传入私钥 `privateKey` 用于生成签名。在 `tokenDescriptor` 中,我们设置了 JWT 的主题(Subject)、过期时间(Expires)等信息,并使用私钥进行签名。 `ValidateToken` 方法用于验证 JWT,其中传入公钥 `publicKey` 用于验证签名。在 `validationParameters` 中,我们设置了验证签名的密钥(IssuerSigningKey)和其他可选的验证参数(如验证签发者和受众)。 请注意,上述示例中使用的是对称加密算法(HMAC),密钥是以 Base64 编码的字符串。如果使用非对称加密算法(如 RSA),则需要使用公钥私钥对,并且相应的密钥格式和库的使用可能会有所不同。 总之,通过使用 JWT 的公钥私钥,你可以生成签名并签发令牌,也可以验证令牌的签名的真实性和完整性。具体的实现方法会根据你所使用的编程语言和库而有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值