Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法验证在C中创建的签名#_C#_Java_Security_Rsa_X509certificate - Fatal编程技术网

C# 无法验证在C中创建的签名#

C# 无法验证在C中创建的签名#,c#,java,security,rsa,x509certificate,C#,Java,Security,Rsa,X509certificate,我正在使用C#创建签名,并用java验证签名。这总是返回false。请求帮助我确定我做错了什么 C#创建签名的代码: SHA256CryptoServiceProvider sha = new SHA256CryptoServiceProvider(); byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(data)); RSACryptoServiceProvider key = (RSACryptoServiceProvider)priv

我正在使用C#创建签名,并用java验证签名。这总是返回false。请求帮助我确定我做错了什么

C#创建签名的代码:

SHA256CryptoServiceProvider sha = new SHA256CryptoServiceProvider();
byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(data));
RSACryptoServiceProvider key = (RSACryptoServiceProvider)privateCert.PrivateKey;
RSACryptoServiceProvider signer = new RSACryptoServiceProvider();
signer.FromXmlString(key.ToXmlString(true));
byte[] signedHash = signer.SignData(hash, CryptoConfig.MapNameToOID("SHA256"));          
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(certificate);
signature.update(data);
boolean retValue= signature.verify(signedHash);
return retValue; // always returns false
验证签名的java代码:

SHA256CryptoServiceProvider sha = new SHA256CryptoServiceProvider();
byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(data));
RSACryptoServiceProvider key = (RSACryptoServiceProvider)privateCert.PrivateKey;
RSACryptoServiceProvider signer = new RSACryptoServiceProvider();
signer.FromXmlString(key.ToXmlString(true));
byte[] signedHash = signer.SignData(hash, CryptoConfig.MapNameToOID("SHA256"));          
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initVerify(certificate);
signature.update(data);
boolean retValue= signature.verify(signedHash);
return retValue; // always returns false
谢谢
Raj

看起来您使用的算法不同。一个使用SHA256,另一个使用RSA的SHA256

尝试MessageDigest,如下例所示:


据我所知,使用签名类,我只能通过带RSA的SHA256、带DSA的SHA1和带RSA的SHA1。有没有一种方法可以在java中使用其他一些类时只使用SHA256。