# 课程：生成和验证签名

> 原文： [https://docs.oracle.com/javase/tutorial/security/apisign/index.html](https://docs.oracle.com/javase/tutorial/security/apisign/index.html)

本课程将指导您完成使用 JDK Security API 生成数据的数字签名以及验证签名是否可信的必要步骤。本课程适用于希望将安全功能合并到其程序中的开发人员，包括加密服务。

本课程演示了如何使用 JDK Security API 来签署文档。该课程显示由具有原始文档的人执行的一个程序将用于生成密钥，使用私钥生成文档的数字签名，以及将公钥和签名导出到文件。

然后它显示了另一个程序的示例，由文档的接收者，签名和公钥执行。它显示了程序如何导入公钥并验证签名的真实性。本课程还讨论并演示了提供和导入密钥的可能替代方法和方法，包括证书。

有关概念和术语（数字签名，证书，密钥库）的更多信息，请参阅 [API 和用于安全代码和文件交换的工具](../sigcert/index.html)课程。

在本课程中，您将创建两个基本应用程序，一个用于生成数字签名，另一个用于验证。接下来是对潜在增强功能的讨论和演示。本课包含三个部分。

*   [生成数字签名](gensig.html)显示使用 API​​为使用私钥的数据生成密钥和数字签名，并将公钥和签名导出到文件。应用程序从命令行获取数据文件名。

*   [验证数字签名](versig.html)显示使用 API​​导入公钥和签名，该签名被声称是指定数据文件的签名，并验证签名的真实性。数据，公钥和签名文件名在命令行中指定。

*   [弱点和替代方案](enhancements.html)讨论了基本程序使用的方法的潜在弱点。然后介绍并演示了提供和导入密钥的可能替代方法和方法，包括使用包含编码密钥字节的文件和使用包含公钥的证书。