私たちは別の会社のAPIを使用しています。
このAPIでは、RSACryptoServiceProvider
を使用してキーペアを生成し、私たちのデータを暗号化できるように公開鍵を送信する必要があります。RSA - (!)モジュラスのみを使用した暗号化?
これは問題ではありません。 APIでは、公開鍵はbyte[]
タイプです。
だから私は何かやって考えた:
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
var pubKey = rsa.ToXmlString(false); //only public
をそして、byte[]
としてそれを表す:
var ValuetoSend = Encoding.UTF8.GetBytes(pubKey);
し、その値を送信します。
しかし、彼らは答えた:
をだから私は不思議に思っていました
"あなただけRSAKeyInfo
情報に私たちにModulus
プロパティを提供する必要があり"、それは可能ですか? Modulusを使用してのみデータを暗号化できますか?
だから私は、テストを作成しました:(My Code
とTheir code
を何卒ご了承下さい)
//My Code
byte[] data_clear = UTF8Encoding.UTF8.GetBytes("hellowא");
var rsa = new RSACryptoServiceProvider(1024);
var MyModulus = rsa.ExportParameters(true).Modulus;
//Their code (I assume , If they only want MyModulus)
var rsa2 = new RSACryptoServiceProvider(1024);
var rsa2Params = rsa2.ExportParameters(true);
rsa2Params.Modulus=MyModulus; //they set their Modulus to MY Modulus
byte[] enc_data = rsa2.Encrypt(data_clear, true);
// Back to my code
var g=Encoding.UTF8.GetString(rsa.Decrypt(enc_data, true));
Console.WriteLine(g);
の検索結果を: 例外:OAEPパディングのデコード中
CryptographicExceptionエラーが発生しました。
質問
1)は、それが彼らのためにのみ弾性係数を使用して暗号化することは可能ですか?
2)そうであれば、私のテストには何が問題なのですか?どのように修正できますか?
編集 - 私はexponenetを追加した場合でも、それは失敗します。
//My Code
byte[] data_clear = UTF8Encoding.UTF8.GetBytes("hellowא");
var rsa = new RSACryptoServiceProvider(1024);
var MyModulus = rsa.ExportParameters(true).Modulus;
var MyExponent = rsa.ExportParameters(true).Exponent;
//Their code (I assume , If they only want MyModulus)
var rsa2 = new RSACryptoServiceProvider(1024);
var rsa2Params = rsa2.ExportParameters(true);
rsa2Params.Modulus=MyModulus; //they set their Modulus to MY Modulus
rsa2Params.Exponent=MyExponent; //they set their Modulus to MY Modulus
byte[] enc_data = rsa2.Encrypt(data_clear, true);
// Back to my code
var g=Encoding.UTF8.GetString(rsa.Decrypt(enc_data, true));
Console.WriteLine(g);
//CryptographicException Error occurred while decoding OAEP padding.
私はモジュラスと指数が必要だと思います。ここでは何かがかわいらしいようです。 –
@EricLippertこんにちはエリック。指数を与えても、それは失敗する(https://i.imgur.com/H1uMPRG.jpg) –
**のモジュラスの種類は**キーの公開部分である(秘密鍵=全ての要素を別々に)、指数がなければ無駄だよね? –