C# 用Java签署文档并用C进行验证#

C# 用Java签署文档并用C进行验证#,c#,java,cryptography,C#,Java,Cryptography,我们将使用Java在Linux服务器上签署文档,然后使用C#在Windows PC上验证文档和签名。最好的方法是什么 在Java中,我尝试使用KeyGenerator生成密钥对: KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN"); keyGen.initialize(256, random)

我们将使用Java在Linux服务器上签署文档,然后使用C#在Windows PC上验证文档和签名。最好的方法是什么

在Java中,我尝试使用KeyGenerator生成密钥对:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");

keyGen.initialize(256, random);

KeyPair pair = keyGen.generateKeyPair();
PublicKey publicKey = pair.getPublic();
System.out.println(" Encoding: " + publicKey.getFormat());

FileOutputStream out = new FileOutputStream("privateKey.dat");
out.write(publicKey.getEncoded());
out.close();
控制台显示密钥的格式为X.509。然后我尝试通过调用将公钥读入C#:

X509Certificate cert= X509Certificate.CreateFromCertFile(m_fileName);

这会引发异常:CryptographicException:找不到请求的对象。任何关于如何完成此任务的建议都将不胜感激。

不幸的是,您只编写了X5.09的公钥部分,这实际上只是公钥的PKCS#1编码。要创建完整的X5.09证书,您需要特殊的软件,或者应该使用其他工具(如OpenSSL命令行)来创建它。您可以使用Bouncy Castle库在代码中创建证书。您应该首先考虑如何存储和使用私钥(密钥管理)


请注意,与其采用低级格式,不如创建CMS(加密消息语法)签名。你甚至可以使用分离的签名。的和版本都支持CMS容器格式。或者,您也可以选择由相同库创建的PGP签名。

请注意,完整的流程演练要求的内容有点太多,如果您被卡住,请(在查看本网站后)提出单独的问题。我的回答中缺少任何具体内容,AlanM?我明白您的意思,证书不完整。我提出了一个新问题,我使用keytool生成公钥/私钥对并导出证书。我读了C#中的证书,并试图创建一个CNG密钥。请参阅[链接]是的,但我的答案中是否缺少任何内容?