Create Rsa Signature
-
I have one function witch check signature.
public static bool CheckSignature(string key64, string sig64)
{
var key = Convert.FromBase64String(key64);
var sig = Convert.FromBase64String(sig64);var rsa = new RSACryptoServiceProvider(new CspParameters { Flags = CspProviderFlags.UseMachineKeyStore }); rsa.FromXmlString("4IlzOY3Y9fXoh3Y5f06wBbtTg94Pt6vcfcd1KQ0FLm0S36aGJtTSb6pYKfyX7PqCUQ8wgL6xUJ5GRPEsu9 gyz8ZobwfZsGCsvu40CWoT9fcFBZPfXro1Vtlh/xl/yYHm+Gzqh0Bw76xtLHSfLfpVOrmZdwKmSFKMTvNXOFd0V18=AQAB"); var def = new RSAPKCS1SignatureDeformatter(); def.SetKey(rsa); def.SetHashAlgorithm("MD5"); return def.VerifySignature(key, sig); }
Now i need to create signature for one of my keys.
public static byte\[\] CreateSignature(string key64) { var data = Convert.FromBase64String(key64); var rSaCryptoServiceProvider = new RSACryptoServiceProvider(new CspParameters { Flags = CspProviderFlags.UseMachineKeyStore }); rSaCryptoServiceProvider.FromXmlString("4IlzOY3Y9fXoh3Y5f06wBbtTg94Pt6vcfcd1KQ0FLm0S36aGJtTSb6pYKfyX7PqCUQ8wgL6xUJ5GRPEsu9 gyz8ZobwfZsGCsvu40CWoT9fcFBZPfXro1Vtlh/xl/yYHm+Gzqh0Bw76xtLHSfLfpVOrmZdwKmSFKMTvNXOFd0V18=AQAB"); var RSAform = new RSAPKCS1SignatureFormatter(); RSAform.SetKey(rSaCryptoServiceProvider); RSAform.SetHashAlgorithm("MD5"); byte\[\] hashData = CalculateMD5Hash(data); return RSAform.CreateSignature(hashData); }
But im getting an exception "Keyset does not exist" on "RSAform.CreateSignature(hashData)" line. Any suggestion?
Still amater
-
I have one function witch check signature.
public static bool CheckSignature(string key64, string sig64)
{
var key = Convert.FromBase64String(key64);
var sig = Convert.FromBase64String(sig64);var rsa = new RSACryptoServiceProvider(new CspParameters { Flags = CspProviderFlags.UseMachineKeyStore }); rsa.FromXmlString("4IlzOY3Y9fXoh3Y5f06wBbtTg94Pt6vcfcd1KQ0FLm0S36aGJtTSb6pYKfyX7PqCUQ8wgL6xUJ5GRPEsu9 gyz8ZobwfZsGCsvu40CWoT9fcFBZPfXro1Vtlh/xl/yYHm+Gzqh0Bw76xtLHSfLfpVOrmZdwKmSFKMTvNXOFd0V18=AQAB"); var def = new RSAPKCS1SignatureDeformatter(); def.SetKey(rsa); def.SetHashAlgorithm("MD5"); return def.VerifySignature(key, sig); }
Now i need to create signature for one of my keys.
public static byte\[\] CreateSignature(string key64) { var data = Convert.FromBase64String(key64); var rSaCryptoServiceProvider = new RSACryptoServiceProvider(new CspParameters { Flags = CspProviderFlags.UseMachineKeyStore }); rSaCryptoServiceProvider.FromXmlString("4IlzOY3Y9fXoh3Y5f06wBbtTg94Pt6vcfcd1KQ0FLm0S36aGJtTSb6pYKfyX7PqCUQ8wgL6xUJ5GRPEsu9 gyz8ZobwfZsGCsvu40CWoT9fcFBZPfXro1Vtlh/xl/yYHm+Gzqh0Bw76xtLHSfLfpVOrmZdwKmSFKMTvNXOFd0V18=AQAB"); var RSAform = new RSAPKCS1SignatureFormatter(); RSAform.SetKey(rSaCryptoServiceProvider); RSAform.SetHashAlgorithm("MD5"); byte\[\] hashData = CalculateMD5Hash(data); return RSAform.CreateSignature(hashData); }
But im getting an exception "Keyset does not exist" on "RSAform.CreateSignature(hashData)" line. Any suggestion?
Still amater
RSA keys are in pairs, but you used public key in both methods. replacing provided key in
CheckSignature
with private key should solve your problem. and inCheckSignature
method you should feedVerifySignature
with MD5 hash of key varibale, the code should be more like thispublic static byte\[\] CreateSignature(string key64) { var data = Convert.FromBase64String(key64); var rSaCryptoServiceProvider = new RSACryptoServiceProvider(new CspParameters { Flags = CspProviderFlags.UseMachineKeyStore }); rSaCryptoServiceProvider.FromXmlString(privateKey); var RSAform = new RSAPKCS1SignatureFormatter(); RSAform.SetKey(rSaCryptoServiceProvider); RSAform.SetHashAlgorithm("MD5"); var md5 = MD5.Create(); byte\[\] hashData = md5.ComputeHash(data); return RSAform.CreateSignature(hashData); }
hope this helps