我们将使用 Java 在 Linux 服务器上签署文档,然后使用 C# 在 Windows PC 上验证文档和签名。最好的方法是什么?
在 Java 中,我尝试使用 KeyGenerator 生成 key 对:
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();
控制台显示 key 格式为X.509。然后我尝试通过以下调用将公钥读入 C#:
X509Certificate cert= X509Certificate.CreateFromCertFile(m_fileName);
这会引发异常: CryptographicException:找不到请求的对象。任何有关如何完成此任务的建议将不胜感激。
最佳答案
不幸的是,您只编写了X5.09的公钥部分,这实际上只不过是公钥的PKCS#1编码。要创建完整的 X5.09 证书,您需要特殊的软件,或者您应该使用其他工具(例如 OpenSSL 命令行)创建它。您可以使用 Bouncy CaSTLe 库在代码中创建证书。不过,您应该首先考虑如何存储和使用您的私钥( key 管理)。
请注意,与其选择低级格式,不如创建 CMS(加密消息语法)签名。您甚至可以使用独立的签名。 C# 均支持 CMS 容器格式。和 Java Bouncy Castle libraries 的版本。或者,您可以选择由相同库创建的 PGP 签名。
关于c# - 使用 Java 签署文档并使用 C# 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19340942/