RSAを使用してC#で文字列を暗号化しています。同じスタブがPythonで動作しますが、C#で暗号化するときに、「メッセージが大きすぎます」と解読するときに問題が発生します。値のC#でRSA暗号化を行い、openSSLで復号化するとメッセージが長すぎます
public static string RSAEncryptMessage(string msg)
{
var publicKeystr =
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp+mrzAmFuuX1o2PZLA3C" +
"/X3c4BTiHbjhR2mF8N5fha5WuiwxNJHtXbJXka4euzhnEdgp4+9zpc7mplgLAMDa" +
"+BGKE7bjNrUmrckX2Aaaf+G1O1w1iU40+cTUm0NfZ6K0v4sLCpzqTnvjw5ilvliL" +
"B5+6vHxvKMHlS6l/tdHgbelv1e7fZZeOVPczS5TDfTkJqMFIoI4KzzcH6Izsxu+H" +
"EizWrT5zYkOCNLWQIpwcMq3h0EXc/qw7NAg/BRMg6HHVkbMNm3eTVzjDq3o77YKq" +
"NHo2Plt2U9DeT5WcsEIslL7SjNV8ib0KVHMBaVQFu+5emsI3dn3VWEV5ZPkBngX2" +
"NQIDAQAB";
byte[] pubkeybytes = Convert.FromBase64String(publicKeystr);
System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider();
System.Security.Cryptography.RSAParameters rsaParam = rsa.ExportParameters(false);
rsaParam.Modulus = pubkeybytes;
rsa.ImportParameters(rsaParam);
byte[] bytemsg = Encoding.ASCII.GetBytes(msg);
Console.WriteLine(bytemsg.Length);
byte[] encValue = rsa.Encrypt(bytemsg, false);
Console.WriteLine(encValue.Length);
return Convert.ToBase64String(encValue);
}
私は暗号化していたメッセージは次のとおりです。
public static void Main()
{
Console.WriteLine(RSAEncryptMessage("1234"));
Console.ReadLine();
}
た暗号文のサイズは294バイトです。 openSSLを使用して暗号化された同じ暗号文のサイズは256バイトです。長さの増加を引き起こしているC#は何ですか?これはパッディングの別のタイプですか?
あなたの 'publicKeystr'はモジュラスのみを含んでいるとは思えませんが、何らかのエンコーディングで公開指数も持つべきです。 –