I have pair of RSA3072 public and private key.
i want use this private key to sign some date with RSA3072_RSASSA-PSS (SHA256 PSS pading) but error is report in step: SignData rsaP.SignData(date1, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
"System.Security.Cryptography.CryptographicException:“Specified padding mode is not valid for this algorithm.”"
ps: private and public key is generate use below code:
void GenerateKeys()
{
using (var rsa = new RSACryptoServiceProvider(3072))
{
try
{
// 获取私钥和公钥。
var publicKey = rsa.ToXmlString(false);
var privateKey = rsa.ToXmlString(true);
// 保存到磁盘
File.WriteAllText(Path.Combine("C:\\Users\\pkean\\source\\repos\\ConsoleApp1\\ConsoleApp1", "publickey.xml"), publicKey);
File.WriteAllText(Path.Combine("C:\\Users\\pkean\\source\\repos\\ConsoleApp1\\ConsoleApp1", "privateKey.xml"), privateKey);
}
finally
{
rsa.PersistKeyInCsp = false;
}
}
}
below is my code:
byte\[\] content = new byte \[2\]{0x12,0x34} ;
string readoutprivateXmlKey;
readoutprivateXmlKey = File.ReadAllText(Path.Combine("C:\\Users\\pkean\\source\\repos\\ConsoleApp1\\ConsoleApp1", "privateKey.xml"));
SingData(readoutprivateXmlKey,content);
byte[] SignData(string privatekey, byte[] date1)
{
RSACryptoServiceProvider rsaP = new RSACryptoServiceProvider(3072);
rsaP.FromXmlString(privatekey);
byte[] byteSign0 = rsaP.SignData(date1, "SHA256");
byte[] byteSign1 = rsaP.SignData(date1, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
byte[] byteSignusehash = rsaP.SignHash(sha256hash, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
return byteSign0;
}
try to change Pad with RSASignaturePadding.pkcs1, Test is OK. but i need use RSA3072_RSASSA-PSS
Using
AsymmetricSignatureProviderworks for me.