c# - 使用 Java 签署文档并使用 C# 验证

标签 c# java cryptography

我们将使用 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/

相关文章:

java - 将 Java Double 格式化为 7 个字符

java - 我应该如何在 RxJava 中建模流程?

ios - 为 tvOS 构建 libcrypto 和 libssl 时出错

java - 使用 servlet 上传文件返回 NULL 值作为异常

javascript - 如何在没有 javascript 的情况下对 Web 表单中的密码进行编码?

cryptography - 如何将 libsodium 私钥转换为兼容 OpenPGP 的私钥数据包?

c# - 使用 ASP.Net MVC3 显示 byte[] 中包含的图像

c# - 如何在不重复/复制相同数字的情况下生成随机数?

C# 4.0 语法 : How do you properly define an interface method?

c# - 你如何在C#中获得随机的当前种子?