通过 BouncyCastle 从加密字符串中通过 OpenSSL 解密字符串的问题

Issues decrypting a string by OpenSSL from encrypted string by BouncyCastle

我正在使用 BouncyCastle 和 C# 通过 RSA 引擎和 public 密钥来加密字符串。

我想用OpenSSL(Linux)解密字符串,用终端解密私钥;实际上是 OpenSSL 库,但命令终端也有问题。

我通过 OpenSSL 命令创建了密钥

openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

我在通过 OpenSSL 解密字符串时遇到问题,我写了一个用于加密文件的存根。

这是加密的存根

  public static void CryptStringByPublicKey(string stringToCrypt)
        {

            var key = GetPublicKey();

            var e = new Pkcs1Encoding(new RsaEngine());

            e.Init(true, key);

            var bytes = Encoding.ASCII.GetBytes(stringToCrypt);

            var encryptedBytes = e.ProcessBlock(bytes, 0, bytes.Length);

            // Which Encoding?
            var stringToSave = Encoding.UTF8.GetString(encryptedBytes);

            File.WriteAllText(@"C:\temp\encrypted_file", stringToSave);



        }

        public static RsaKeyParameters GetPublicKey()
        {

            const string privateKeyString = @"C:\temp\public_key.pem";


            RsaKeyParameters publicKey;

            using (var reader = File.OpenText(privateKeyString))
                publicKey = (RsaKeyParameters)new PemReader(reader).ReadObject();

            return publicKey;
        }

这是 Linux 上用于解密的命令行

openssl rsautl -decrypt -in encrypted_file -out message.decrypted -inkey lora_private.pem 


我期待 message.decrypted 中的解密字符串,但 openssl 响应

140251030225344:error:0406506C:rsa routines:rsa_ossl_private_decrypt:data greater than mod len:../crypto/rsa/rsa_ossl.c:399:

我试图找出编码字符数组的问题,我尝试了各种编码(UTF8、ASCII)。

有人可以帮我提点建议吗?

不能评论太新了。

如果必须以文本形式发送,请在发送前尝试使用 base64 加密。我已经反向完成了这个 (php openssl --> c#)

然后删除空格。

byte[] encryptedBytes = Convert.FromBase64String(encrypted.Replace(" ", "+"));

忘记了我的加密字节是 base64 编码的。 OpenSSL 会很乐意为您解码您的 base64 字符串,您可以制作一个漂亮的单行代码。不要忘记 -A 选项:

openssl.exe base64 -A -d -in enc64.txt | openssl.exe pkeyutl -decrypt -inkey .\keys\privatekey.pem