通过BouSSLCastle从加密字符串通过OpenSSL解密字符串时出现问题

时间:2019-07-09 13:37:34

标签: c# encryption openssl rsa bouncycastle

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

我想通过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:

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

有人可以为我提供任何建议吗?

1 个答案:

答案 0 :(得分:0)

不能评论太新。

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

然后删除空格。

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