gpt4 book ai didi

.NET RSA 加密不适用于 OpenSSL

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:59 25 4
gpt4 key购买 nike

我在 https://github.com/eastwood/dotnet-rsa-encryption 创建了一个演示库.来自 README,其中包含问题陈述。

RSA加密问题

我生成了一个随机的 RSA key 对。这是使用以下方法完成的:

openssl genrsa -out test-key.pem 4096
openssl rsa -in key.pem -pubout > test-key-public.key

下面概述了问题,我根本无法获得适用于 .NET Core 的有效解决方案。

先决条件

  1. 网络核心
  2. 节点js
  3. 打开SSL

命令在 osx 上运行,但希望也适用于 windows + linux。

打开 SSL CLI

$ 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核心

.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:error:0406506C:rsa routines:RSA_EAY_PRIVATE_DECRYPT:data greater than mod len:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.2/libressl/crypto/rsa/rsa_eay.c:515

尝试

我试过:

  • 改变编码类型
  • OAEP 填充
  • 删除 BOM
  • 反转字节顺序

我希望有一些 .NET/RSA 专家以前遇到过这个问题并提出了问题的解决方案

干杯,

C.

最佳答案

最终实现了充气城堡,但正如 Maarten 指出的那样,可能有一个普通的解决方案可用。

关于.NET RSA 加密不适用于 OpenSSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50940889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com