1

我们将使用 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: 找不到请求的对象。任何有关如何完成此任务的建议将不胜感激。

4

1 回答 1

0

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

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

于 2013-10-13T15:51:17.333 回答