签名证书 jwt asp.net 核心中的密钥长度应该是多少
Posted
技术标签:
【中文标题】签名证书 jwt asp.net 核心中的密钥长度应该是多少【英文标题】:what should be the key length in signingCredentials jwt asp.net core 【发布时间】:2019-02-08 17:30:49 【问题描述】:public static string GenerateToken(string Username)
var claimsdata = new[] new Claim(ClaimTypes.Name, Username) ;
var key = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes("qwertyuioplkjhgfdsazxcvbnmqwertlkjfdslkjflksjfklsjfklsjdflskjflyuioplkjhgfdsazxcvbnmmnbv"));
var signInCred = new SigningCredentials(key, SecurityAlgorithms.HmacSha384Signature);
var token = new JwtSecurityToken(
issuer: "mysite",
audience: "mysite",
expires: DateTime.Now.AddMinutes(60),
claims: claimsdata,
signingCredentials: signInCred);
var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
return tokenString;
//密钥长度为88个字符。如果我将其减少到少于 16 个字符,则会出现异常:
System.ArgumentOutOfRangeException: 'IDX10603: 解密失败。 尝试的键:'[PII 被隐藏]'。捕获的异常:'[PII 被隐藏]'。 token: '[PII 被隐藏]''
【问题讨论】:
您可能想阅读this article on Cryptography和this article on Security。 但我还是不明白为什么它应该是最小 128 位。 【参考方案1】:来自微软文档:
所以我假设如果你使用的少于这个,一旦转换为字节,它应该用 0 填充。
【讨论】:
【参考方案2】:对于 .NET/.NET Core,密钥 Secret key 应至少为 128 位,即(16 字节)
示例:
"JwtToken":
"SecretKey": "minimumSixteenCharacters",
"Issuer": "https://localhost:44378"
【讨论】:
【参考方案3】:sha256 中的最小长度为 16 个字符,因为它们是 256 个十六进制位,那么 256/16 = 16
【讨论】:
这是正确的答案以上是关于签名证书 jwt asp.net 核心中的密钥长度应该是多少的主要内容,如果未能解决你的问题,请参考以下文章