lminuti/Delphi-OpenSSL

GitHub: lminuti/Delphi-OpenSSL

Delphi 的 OpenSSL 封装库,提供面向对象的加密与证书操作,简化在 Delphi 应用中集成 OpenSSL。

Stars: 159 | Forks: 74

# Delphi OpenSSL 库

Delphi OpenSSL

一个 [Delphi](http://www.embarcadero.com/products/delphi) 的 [OpenSSL](https://openssl.org/) 封装,提供用于加密操作的高级面向对象接口。该库简化了在 Delphi 应用程序中使用 OpenSSL 强大的加密功能,提供了易于使用的类,支持 RSA 加密、对称密码、数字签名和证书处理。 ## 功能特性 - 使用 RSA 算法加密/解密 - 对称密码例程 - Base64 编码与解码 - 基本 PAM 支持 - 生成伪随机位串 - 基本 S/MIME 支持 - 生成 PKCS PEM 格式的 RSA 密钥对 - 生成自签名 X.509 证书和证书签名请求 (CSR) - 对较新 OpenSSL 版本 (1.1.1 和 3.x) 的实验性支持 ## 用法 ### 使用 X509 证书中的公钥加密 *命令行:* ``` OpenSSL rsautl -encrypt -certin -inkey publiccert.cer -in test.txt -out test.txt.cry ``` *源代码:* ``` var RSAUtil :TRSAUtil; Certificate :TX509Certificate; begin RSAUtil := TRSAUtil.Create; try Certificate := TX509Certificate.Create; try Certificate.LoadFromFile('publiccert.cer'); RSAUtil.PublicKey.LoadFromCertificate(Certificate); RSAUtil.PublicEncrypt('test.txt', 'test.txt.cry'); finally Certificate.Free; end; finally RSAUtil.Free; end; end; ``` ### 使用 PEM 格式的公钥加密 *命令行:* ``` OpenSSL rsautl -encrypt -pubin -inkey publickey.pem -in test.txt -out test.txt.cry ``` *源代码:* ``` var RSAUtil :TRSAUtil; begin RSAUtil := TRSAUtil.Create; try RSAUtil.PublicKey.LoadFromFile('publickey.pem'); RSAUtil.PublicEncrypt('test.txt', 'test.txt.cry'); finally RSAUtil.Free; end; end; ``` ### 使用 PEM 格式的私钥解密 *命令行:* ``` OpenSSL rsautl -decrypt -inkey privatekey.pem -in test.txt.cry -out test.txt ``` *源代码:* ``` var RSAUtil :TRSAUtil; begin RSAUtil := TRSAUtil.Create; try RSAUtil.PrivateKey.OnNeedPassphrase := PassphraseReader; RSAUtil.PrivateKey.LoadFromFile('privatekey.pem'); RSAUtil.PrivateDecrypt('test.txt.cry', 'test.txt'); finally RSAUtil.Free; end; end; ``` ### 使用 AES256 加密 *命令行:* ``` OpenSSL enc -base64 -aes256 -in text.plain -out text.aes256 -k secure ``` *源代码:* ``` var EncUtil :TEncUtil; begin EncUtil := TEncUtil.Create; try EncUtil.UseBase64 := True; EncUtil.Passphrase := 'secure'; EncUtil.Cipher := 'AES-256'; EncUtil.Encrypt('text.plain', 'text.aes256'); finally EncUtil.Free; end; end; ``` ### 生成自签名证书 *命令行:* ``` OpenSSL req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes ``` *源代码:* ``` var ReqUtil: TReqUtil; begin ReqUtil := TReqUtil.Create; try ReqUtil.GenerateSelfSignedCertificate('CN=localhost,O=MyCompany,C=IT', 365, 2048); ReqUtil.SaveCertificateToFile('cert.pem'); ReqUtil.SavePrivateKeyToFile('key.pem'); finally ReqUtil.Free; end; end; ``` ### 生成证书签名请求 (CSR) *命令行:* ``` OpenSSL req -new -newkey rsa:2048 -keyout key.pem -out request.csr -nodes ``` *源代码:* ``` var ReqUtil: TReqUtil; begin ReqUtil := TReqUtil.Create; try ReqUtil.GenerateCSR('CN=example.com,O=MyCompany,C=IT', 2048); ReqUtil.SaveCSRToFile('request.csr'); ReqUtil.SavePrivateKeyToFile('key.pem'); finally ReqUtil.Free; end; end; ``` ## 核心单元 | 单元 | 用途 | |------|------| | `OpenSSL.Core.pas` | 基础类、错误处理、`TSubjectInfo`/`TSerialNumber` 记录、实用函数 (Base64、EVP 辅助函数) | | `OpenSSL.RSAUtils.pas` | RSA 操作:`TRSAUtil`、`TRSAPublicKey`、`TRSAPrivateKey`、`TX509Certificate`、`TRSAKeyPair` | | `OpenSSL.EncUtils.pas` | 对称加密:`TEncUtil` 及其支持的密码 (AES 等) | | `OpenSSL.RandUtils.pas` | 随机数生成:`TRandUtil` | | `OpenSSL.ReqUtils.pas` | 证书/CSR 生成:`TReqUtil` | | `OpenSSL.SMIMEUtils.pas` | S/MIME 支持:`TSMIMEUtil` | | `OpenSSL.libeay32.pas` | 低级 OpenSSL DLL 绑定 (在不使用 TaurusTLS 时使用) | ## 先决条件 ### 安装 OpenSSL 如果您的应用程序需要 OpenSSL 支持,您必须在部署应用程序之前将必要的库文件放置在文件系统中。 | 平台 | 是否需要下载 | 文件名 | 静态/动态链接 | |------|--------------|--------|----------------| | Windows (32 位和 64 位) | 是 | libeay32.dll 和 ssleay32.dll | 动态 | | iOS 设备 | 是 | libcrypto.a 和 libssl.a | 静态 | | Android 设备 | 否 | | 动态 | 请根据您使用的平台参考以下要求: #### 32 位和 64 位 Windows 要在 32 位或 64 位 Windows 上安装 OpenSSL,您需要将 **libeay32.dll** 和 **ssleay32.dll** 动态库文件复制到您的文件系统;您可以从以下位置之一下载它们: - **选项 1** - 下载 [OpenSSL 安装程序文件](http://slproweb.com/products/Win32OpenSSL.html) 并安装。 - **选项 2** - 下载 [OpenSSL 压缩库文件](https://github.com/IndySockets/OpenSSL-Binaries) 并将 libeay32.dll 和 ssleay32.dll 文件复制到系统路径。 如果您选择选项 2 并决定将 libeay32.dll 和 ssleay32.dll 文件复制到系统路径,请确保将它们复制到正确的位置: - **32 位 Windows**: 必须将 libeay32.dll 和 ssleay32.dll 的 32 位文件复制到 Windows 系统文件夹 (System32 文件夹)。 - **64 位 Windows**: 必须将 libeay32.dll 和 ssleay32.dll 的 64 位文件复制到 Windows 系统文件夹中的 64 位文件 (System32),并将 libeay32.dll 和 ssleay32.dll 的 32 位文件复制到 Windows 32 位文件文件夹 (SysWOW64 文件夹)。 因此,在使用 64 位 Windows 时,请记住: - **System32 文件夹** 仅用于 64 位文件。 - **SysWOW64 文件夹** 仅用于 32 位文件。 ## 安装 - 将源代码路径 "Source" 添加到您的 Delphi 项目路径 - 运行演示并按照教程操作 ## TaurusTLS 支持 (实验性) 对较新 OpenSSL 版本 (1.1.1 和 3.x) 的实验性支持已通过 [TaurusTLS](https://github.com/TaurusTLS-Developers/TaurusTLS) 添加。 ### 启用 TaurusTLS 要启用 TaurusTLS 支持,请在 `Source/OpenSSL.inc` 文件中取消注释 `USE_TAURUS_TLS` 指令: ``` {$DEFINE USE_TAURUS_TLS} {$DEFINE USE_INLINE} ``` ### 要求 - 您的 Delphi 环境中必须安装 [TaurusTLS](https://github.com/TaurusTLS-Developers/TaurusTLS) - 必须将适当的 OpenSSL DLL 文件放在系统上 请参考 [TaurusTLS 文档](https://github.com/TaurusTLS-Developers/TaurusTLS) 获取有关如何获取和安装所需 OpenSSL 库的说明。
标签:Base64, CSR, CVE, Delphi, OpenSSL, OpenSSL 1.1.1, OpenSSL 3.x, PAM, PKCS PEM, RSA, S/MIME, SSL, TLS, X.509, XML 请求, 伪随机比特串, 公钥加密, 加密, 加密库, 加密算法, 加密组件, 威胁情报, 安全开发, 安全测试工具, 密码学, 密钥对生成, 对称加密, 开发者工具, 手动系统调用, 数字签名, 漏洞扫描器, 私钥解密, 编程库, 自动化审计, 自签名证书, 解密, 证书处理, 防御工具, 面向对象