首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

使用 OpenSSL 与 DSA 算法生成数字签名的实战指南

     編輯:PHP 相關知識

OpenSSL DSA 签名命令详解

使用 OpenSSL 命令行工具基于 DSA 算法生成数字签名的基本语法如下:

openssl> dgst -dss1 -sign C.pri -out signature.bin s.txt

参数说明

  • C.pri:DSA 算法生成的私钥文件。
  • s.txt:待签名的原文(明文)文件。
  • signature.bin:生成的二进制签名文件。
  • -dss1:指定使用 DSS1(即 SHA1)作为摘要算法。DSA 密钥必须搭配 SHA1/DSS1 使用。

PHP 查看签名内容

生成的 signature.bin 为二进制数据,可通过 PHP 转为十六进制查看:

<?php
echo bin2hex(file_get_contents('signature.bin'));
?>

消息摘要算法补充知识

支持的算法

OpenSSL 支持:MD2, MD4, MD5, MDC2, SHA1(常称 DSS1), RIPEMD-160。其中 SHA1 和 RIPEMD-160 产生 160 位哈希值,其余为 128 位。除兼容性需求外,推荐使用 SHA1 或 RIPEMD-160。

算法调用差异

  • 除 RIPEMD-160 需用 rmd160 命令外,其他算法均可用 dgst 命令执行。
  • OpenSSL 对 SHA1 处理特殊:有时必须称作 DSS1 来引用(特别是 DSA 签名时)。

签名与验签的算法搭配规则

  • DSA 私钥:必须搭配 DSS1(SHA1)使用。
  • RSA 私钥:可搭配任意消息摘要算法。

常用 OpenSSL 签名/验签示例

openssl dgst -sha1 file.txtopenssl sha1 -out digest.txt file.txtopenssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txtopenssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txtopenssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txtopenssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt
操作命令示例
SHA1 计算文件哈希(输出到标准输出)
SHA1 计算哈希并输出到文件
DSS1 为文件签名(DSA 私钥)
DSS1 验证签名(DSA 公钥)
SHA1 为文件签名(RSA 私钥)
SHA1 验证签名(RSA 公钥)

最佳实践提示

  • 生产环境建议使用 SHA256 等更强算法(需 OpenSSL 1.0.0+),并通过 -sha256 参数指定。
  • 私钥文件权限应设为 600,防止泄露。
  • 签名前务必确认原文完整性(如通过校验和)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved