我正在使用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)。
有人可以为我提供任何建议吗?
答案 0 :(得分:0)
不能评论太新。
如果必须以文本形式发送,请在发送前尝试以base64加密。我已经反向完成了(php openssl-> c#)
然后删除空格。
byte[] encryptedBytes = Convert.FromBase64String(encrypted.Replace(" ", "+"));