我在https://github.com/eastwood/dotnet-rsa-encryption创建了一个演示仓库。在自述文件中,其中包括问题说明。
我已经生成了一个随机的RSA密钥对。这是使用以下方法完成的:
openssl genrsa -out test-key.pem 4096
openssl rsa -in key.pem -pubout > test-key-public.key
以下概述了问题,在该问题上我根本无法获得适用于.NET Core的解决方案。
命令是在osx上运行的,但希望也可以在Windows + Linux上使用。
$ cat run-cli.sh`
echo "Encrypting the following text: 4111111111111"
echo "411111111111" | openssl rsautl -encrypt -oaep -pubin -inkey certs/test-key-public.key | base64 | cat > cli-encrypted.txt
cat cli-encrypted.txt | base64 --decode | openssl rsautl -decrypt -oaep -inkey certs/test-key.pem
这完全符合预期。
节点也正常工作。样机为here
您可以通过以下方式运行:
npm i
npm run start && ./run-node.sh`
.NET不起作用:(
class Program
{
static void Main()
{
using (var rsa = new RSACryptoServiceProvider())
{
var publicKey = "<snipped>";
var data = "411111111111";
var rsaKeyInfo = rsa.ExportParameters(false);
var byteArray = Convert.FromBase64String(publicKey);
rsaKeyInfo.Modulus = byteArray;
rsa.ImportParameters(rsaKeyInfo);
var result = rsa.Encrypt(Encoding.UTF8.GetBytes(data), true);
var encrypted = Convert.ToBase64String(result);
Console.WriteLine(encrypted);
System.IO.File.WriteAllText(@"dotnet-encrypted.txt", encrypted);
}
}
}
dotnet run && ./run-dotnet.sh
问题本质上是与我的.NET(我使用的是dotnet核心)实现有关,因此,我能够导入4096位RSA公钥并正确加密数据。但是,使用OpenSSL解密后,我失败了:
140735518716872:错误:0406506C:RSA例程:RSA_EAY_PRIVATE_DECRYPT:数据大于mod len:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.2/libressl/crypto/rsa/rsa_eay .c:515
我尝试过:
我希望以前有一些.NET / RSA专家遇到过此问题并提出解决方案的建议
干杯
C。
答案 0 :(得分:0)
最终实现了有弹性的城堡,尽管正如Maarten指出的那样,有可能提供一种有效的解决方案。