RSA Public 16 字节的密钥指数
RSA Public Key Exponents of 16 bytes
我正在编写一个使用 public 密钥的软件,该密钥在指数中有 16 个字节
我有以下代码
string longKey = @"-----BEGIN RSA PUBLIC KEY-----
MIGWAoGBAMqfGO9sPz+kxaRh/qVKsZQGul7NdG1gonSS3KPXTjtcHTFfexA4MkGA
mwKeu9XeTRFgMMxX99WmyaFvNzuxSlCFI/foCkx0TZCFZjpKFHLXryxWrkG1Bl9+
+gKTvTJ4rWk1RvnxYhm3n/Rxo2NoJM/822Oo7YBZ5rmk8NuJU4HLAhAYcJLaZFTO
sYU+aRX4RmoF
-----END RSA PUBLIC KEY-----";
using (var reader = new StringReader(longKey))
{
var pem = new PemReader(reader);
var o = (RsaKeyParameters)pem.ReadObject();
using (var rsa = new RSACryptoServiceProvider())
{
var parameters = new RSAParameters
{
Modulus = o.Modulus.ToByteArray(),
Exponent = o.Exponent.ToByteArray()
};
rsa.ImportParameters(parameters);
//other code is here that uses the rsa
}
}
密钥与某些条形码一起使用并提供给我,但也可以在不同的其他网站上在线获得
我面临的问题是 ImportParameters
给出了一个异常,仅显示 'Bad Data' 经过研究我发现 RSACryptoServiceProvider 仅在指数中使用 4 个字节,但此 public 键有指数中的 16 个字节。如果我将 Exponent 设为静态字节数组 1,0,1,则 ImportParameters
有效,但显然我的其余代码失败了
有没有其他方法可以使用此密钥,例如 C++,或者可以在 C# 中完成。我不是 RSA 加密方面的专家
如果您使用的是 .NET 4.6 或更高版本,则可以使用 RSACng
作为 RSACryptoServiceProvider
的直接替代品。
它有一点不幸的支持矩阵:
- 4.6:RSACng 非常好用,只要您只在自己的代码中使用它就可以了。
- 4.6.1:一些但不是所有的框架库都理解 RSACng 对象(RSACryptoServiceProvider 是特例)
- 4.6.2:几乎所有的框架库都懂RSACng
RSACng 对 Exponent
值的大小没有 4 字节限制。
我正在编写一个使用 public 密钥的软件,该密钥在指数中有 16 个字节
我有以下代码
string longKey = @"-----BEGIN RSA PUBLIC KEY-----
MIGWAoGBAMqfGO9sPz+kxaRh/qVKsZQGul7NdG1gonSS3KPXTjtcHTFfexA4MkGA
mwKeu9XeTRFgMMxX99WmyaFvNzuxSlCFI/foCkx0TZCFZjpKFHLXryxWrkG1Bl9+
+gKTvTJ4rWk1RvnxYhm3n/Rxo2NoJM/822Oo7YBZ5rmk8NuJU4HLAhAYcJLaZFTO
sYU+aRX4RmoF
-----END RSA PUBLIC KEY-----";
using (var reader = new StringReader(longKey))
{
var pem = new PemReader(reader);
var o = (RsaKeyParameters)pem.ReadObject();
using (var rsa = new RSACryptoServiceProvider())
{
var parameters = new RSAParameters
{
Modulus = o.Modulus.ToByteArray(),
Exponent = o.Exponent.ToByteArray()
};
rsa.ImportParameters(parameters);
//other code is here that uses the rsa
}
}
密钥与某些条形码一起使用并提供给我,但也可以在不同的其他网站上在线获得
我面临的问题是 ImportParameters
给出了一个异常,仅显示 'Bad Data' 经过研究我发现 RSACryptoServiceProvider 仅在指数中使用 4 个字节,但此 public 键有指数中的 16 个字节。如果我将 Exponent 设为静态字节数组 1,0,1,则 ImportParameters
有效,但显然我的其余代码失败了
有没有其他方法可以使用此密钥,例如 C++,或者可以在 C# 中完成。我不是 RSA 加密方面的专家
如果您使用的是 .NET 4.6 或更高版本,则可以使用 RSACng
作为 RSACryptoServiceProvider
的直接替代品。
它有一点不幸的支持矩阵:
- 4.6:RSACng 非常好用,只要您只在自己的代码中使用它就可以了。
- 4.6.1:一些但不是所有的框架库都理解 RSACng 对象(RSACryptoServiceProvider 是特例)
- 4.6.2:几乎所有的框架库都懂RSACng
RSACng 对 Exponent
值的大小没有 4 字节限制。