sgcCrypto 功能矩阵
sgcCrypto 所做的一切,映射到磁盘上的 43 个单元。这里没有组件,也没有设计时属性:下面的每一行都是一个可以直接调用的函数或过程。每份许可证都附带完整源代码。下方的锚点会带您跳转到这些单元所属的六大能力分类。
sgcCrypto 所做的一切,映射到磁盘上的 43 个单元。这里没有组件,也没有设计时属性:下面的每一行都是一个可以直接调用的函数或过程。每份许可证都附带完整源代码。下方的锚点会带您跳转到这些单元所属的六大能力分类。
sgcCrypto 没有组件。下面的 43 个单元只导出普通函数,没有 Tsgc* 类,也没有 sgcCrypto_Reg.pas。将一个单元添加到您的 uses 子句中,然后调用该函数即可。
已经包含在内。sgcCrypto 已免费包含在 sgcWebSockets Standard、Professional 和 Enterprise 中,以及 All-Access 中。它也作为独立产品出售(捆绑 sgcWebSockets Core 运行时),供只拥有 Core 的客户使用。参见价格页面。
sgcWebSockets/delphi/Source/ 下的每个 sgcCrypto_*.pas 单元,按分类列出。
| 单元 | 分类 | 功能 |
|---|---|---|
sgcCrypto_AES | 对称加密 | AES-CBC、AES-GCM(AEAD)、AES-CTR。 |
sgcCrypto_Modes | 对称加密 | AES-ECB、OFB、CFB、CTS,以及 Key Wrap / 带填充的 Key Wrap。 |
sgcCrypto_CMAC | 对称加密 | AES-CMAC 消息认证。 |
sgcCrypto_ChaCha | 对称加密 | ChaCha20、XChaCha20、Salsa20、XSalsa20。 |
sgcCrypto_Poly1305 | 对称加密 | Poly1305 MAC、ChaCha20-Poly1305 和 XChaCha20-Poly1305 AEAD。 |
sgcCrypto_SHA2 | 哈希与 KDF | SHA-1、SHA-224、SHA-256、SHA-384、SHA-512。 |
sgcCrypto_Keccak | 哈希与 KDF | SHA-3、SHAKE128/256、cSHAKE、KMAC。 |
sgcCrypto_Blake2b | 哈希与 KDF | BLAKE2b,带密钥或不带密钥。 |
sgcCrypto_Blake2s | 哈希与 KDF | BLAKE2s,带密钥或不带密钥。 |
sgcCrypto_HMAC | 哈希与 KDF | HMAC-SHA1/256/384/512。 |
sgcCrypto_KDF | 哈希与 KDF | PBKDF2,可选哈希算法。 |
sgcCrypto_HKDF | 哈希与 KDF | HKDF 提取与展开。 |
sgcCrypto_Scrypt | 哈希与 KDF | scrypt 内存困难型 KDF。 |
sgcCrypto_Argon2 | 哈希与 KDF | Argon2d、Argon2i、Argon2id。 |
sgcCrypto_SipHash | 哈希与 KDF | SipHash-2-4 带密钥哈希。 |
sgcCrypto_TLSH | 哈希与 KDF | TLSH 模糊哈希与相似度比较。 |
sgcCrypto_Ed25519 | 签名与密钥交换 | Ed25519 签名 / 验证。 |
sgcCrypto_X25519 | 签名与密钥交换 | X25519 Diffie-Hellman。 |
sgcCrypto_Ed448 | 签名与密钥交换 | Ed448 签名 / 验证。 |
sgcCrypto_X448 | 签名与密钥交换 | X448 Diffie-Hellman。 |
sgcCrypto_GF448 | 签名与密钥交换 | 为 Ed448/X448 提供内部 GF(2^448-2^224-1) 域运算。 |
sgcCrypto_ECCurves | 签名与密钥交换 | 基于 secp256k1 和 Brainpool P256r1/P384r1/P512r1 的 ECDSA / ECDH。 |
sgcCrypto_EC | 签名与密钥交换 | 通用 EC 签名/验证,格式为 JWS(ES256/384/512),以及 ECDH。 |
sgcCrypto_RSA | 签名与密钥交换 | RSA PKCS#1 v1.5 签名,PKCS#1 v1.5 / PSS 验证,来自 PEM 或原始数据。 |
sgcCrypto_RSA_Keys | 签名与密钥交换 | RSA 密钥生成、OAEP、PSS、PKCS#1 签名/验证、DER/PEM 导出。 |
sgcCrypto_ECIES | 签名与密钥交换 | 基于 X25519 的 ECIES 封装 / 解封混合加密。 |
sgcCrypto_ASN1 | PKI | DER 读取器、PEM 编解码器、PKCS#1/SEC 1 密钥解析。 |
sgcCrypto_DER | PKI | DER 写入原语。 |
sgcCrypto_BigInteger | PKI | 内部任意精度整数运算。 |
sgcCrypto_X509 | PKI | X.509 解析、验证、证书链、CRL、吊销检查。 |
sgcCrypto_X509_Gen | PKI | 自签名证书和 PKCS#10 CSR 生成。 |
sgcCrypto_MLKEM | 后量子 | ML-KEM 密钥封装(FIPS 203),3 种参数集。 |
sgcCrypto_MLKEM_Poly | 后量子 | ML-KEM 背后的内部多项式环运算。 |
sgcCrypto_MLKEM_Hybrid | 后量子 | 混合 X25519 + ML-KEM 密钥封装。 |
sgcCrypto_MLDSA | 后量子 | ML-DSA 数字签名(FIPS 204),3 种参数集。 |
sgcCrypto_MLDSA_Poly | 后量子 | ML-DSA 背后的内部多项式环运算。 |
sgcCrypto_SLHDSA | 后量子 | SLH-DSA 签名(FIPS 205),6 种 SHAKE 参数集。 |
sgcCrypto_OTP | OTP 与杂项 | HOTP、TOTP,恒定时间验证窗口。 |
sgcCrypto_Encoding | OTP 与杂项 | 恒定时间比较、安全清零、十六进制/Base64url/Base32。 |
sgcCrypto_Zip_AE2 | OTP 与杂项 | ZIP 条目的 WinZip AES 加密,AE-1 / AE-2。 |
sgcCrypto_Legacy | OTP 与杂项 | MD4、MD5、HMAC-MD5、DES-ECB,仅用于互操作。 |
sgcCrypto_Random | OTP 与杂项 | 跨平台 CSPRNG。 |
sgcCrypto_Int64 | OTP 与杂项 | 为 Delphi 7 提供的内部 64 位整数模拟。 |
生产代码实际会用到的 AES 模式,外加 ChaCha20/Poly1305 AEAD 系列。
| 能力 | 函数 | 说明 |
|---|---|---|
| AES-CBC | sgcAES_CBC_Encrypt / sgcAES_CBC_Decrypt | PKCS#7 填充,16 字节 IV。密钥长度决定所用的密码:16/24/32 字节对应 AES-128/192/256。 |
| AES-GCM(AEAD) | sgcAES_GCM_Encrypt / sgcAES_GCM_Decrypt | 建议使用 12 字节 IV。16 字节标签,以恒定时间比较;标签校验失败时解密函数返回 False 和空明文。 |
| AES-CTR | sgcAES_CTR | SRTP 风格的 AES-CM(RFC 3711)。对称调用,无填充,128 位大端计数器。 |
| AES-ECB | sgcAES_ECB_Encrypt / sgcAES_ECB_Decrypt | 没有 IV,没有链接。为了与指定该模式的格式互操作而提供。 |
| AES-OFB / AES-CFB | sgcAES_OFB、sgcAES_CFB_Encrypt / sgcAES_CFB_Decrypt | 流密码风格的反馈模式。 |
| AES-CTS | sgcAES_CTS_Encrypt / sgcAES_CTS_Decrypt | 密文窃取:加密长度不是块大小整数倍的数据,且无需填充开销。 |
| AES Key Wrap | sgcAES_KeyWrap / sgcAES_KeyUnwrap | RFC 3394,用于将一个密钥包装在另一个密钥之下。 |
| 带填充的 AES Key Wrap | sgcAES_KeyWrapPad / sgcAES_KeyUnwrapPad | RFC 5649,用于长度不是 8 字节整数倍的密钥材料。 |
| AES-CMAC | sgcAES_CMAC / sgcAES_CMAC_Verify | RFC 4493 消息认证码。 |
| 底层块原语 | sgcAES_ExpandKey、sgcAES_EncryptBlock、sgcAES_DecryptBlock | 供上述模式和 MAC 单元使用;仅在需要构建一种尚未提供的模式时才直接调用。 |
| ChaCha20 | sgcChaCha20 | RFC 8439,96 位 nonce,32 位计数器。 |
| XChaCha20 | sgcXChaCha20 | 192 位扩展 nonce,适合大规模生成随机 nonce 的场景。 |
| Salsa20 / XSalsa20 | sgcSalsa20 / sgcXSalsa20 | 前身流密码系列,两种 nonce 长度均支持。 |
| 子密钥派生 | sgcHChaCha20 / sgcHSalsa20 | X 变体内部用它们从前 16 个 nonce 字节派生子密钥。 |
| Poly1305 MAC | sgcPoly1305 / sgcPoly1305_Verify | 一次性认证器,RFC 8439。切勿重复使用同一个 Poly1305 密钥。 |
| ChaCha20-Poly1305 AEAD | sgcChaCha20Poly1305_Encrypt / _Decrypt | TLS 1.3 第二套密码套件以及 SSH 背后所用的 AEAD 密码。 |
| XChaCha20-Poly1305 AEAD | sgcXChaCha20Poly1305_Encrypt / _Decrypt | 同样的 AEAD,192 位 nonce,即 libsodium 所称的 crypto_aead_xchacha20poly1305_ietf 构造。 |
每一种主流哈希系列,外加 PBKDF2、HKDF、scrypt 以及全部三种 Argon2 变体。
| 能力 | 函数 | 说明 |
|---|---|---|
| SHA-1 / SHA-2 | sgcSHA1、sgcSHA224、sgcSHA256、sgcSHA384、sgcSHA512 | FIPS 180-4。SHA-1 仅为互操作而保留,不建议用于新签名。 |
| SHA-3 | sgcSHA3_224 / _256 / _384 / _512 | FIPS 202,Keccak 海绵结构,与 SHA-2 在结构上完全独立。 |
| SHAKE128 / SHAKE256 | sgcSHAKE128 / sgcSHAKE256 | 可扩展输出函数:可请求任意摘要长度。 |
| cSHAKE128 / cSHAKE256 | sgcCSHAKE128 / sgcCSHAKE256 | 带域分离的 SHAKE,NIST SP 800-185,是 KMAC 的基础。 |
| KMAC128 / KMAC256 | sgcKMAC128 / sgcKMAC256 | 基于 Keccak 的 MAC,输出长度可变。 |
| BLAKE2b | sgcBlake2b / sgcBlake2b_Keyed | RFC 7693,摘要长度最多 64 字节,内置密钥支持(无需单独的 HMAC)。 |
| BLAKE2s | sgcBlake2s / sgcBlake2s_Keyed | RFC 7693,摘要长度最多 32 字节,为 32 位平台优化。 |
| 流式摘要 | sgcBlake2b_Init/_Update/_Final,Keccak/Blake2s 上的对应调用 | 用于哈希无法一次性放入内存的大型数据。 |
| HMAC | sgcHMAC_SHA1 / _SHA256 / _SHA384 / _SHA512 | RFC 2104,基于 SHA-1/2 系列的带密钥哈希。 |
| PBKDF2 | sgcPBKDF2、sgcPBKDF2_SHA1 / _SHA256 / _SHA512 | RFC 8018。仅具备轻度内存困难性;可选时优先使用 Argon2id 或 scrypt。 |
| HKDF | sgcHKDF_Extract_SHA256 / _SHA384、sgcHKDF_Expand_SHA256 / _SHA384、sgcHKDF_SHA256 / _SHA384 | RFC 5869,提取再展开的密钥派生方式,是将共享密钥转换为多个密钥的标准做法。 |
| scrypt | sgcScrypt | RFC 7914,内存困难,抵御 GPU/ASIC 攻击的能力远优于 PBKDF2。 |
| Argon2 | sgcArgon2(d / i / id)、便捷封装 sgcArgon2id | RFC 9106,密码哈希竞赛的获胜者。完整接口支持可选密钥(pepper)和关联数据。 |
| SipHash-2-4 | sgcSipHash24 / sgcSipHash24_Value | 用于哈希表键的快速带密钥 PRF,可抵御哈希洪泛拒绝服务。 |
| TLSH 模糊哈希 | sgcTLSH、sgcTLSH_Init/_Update/_Final | 用于近似重复检测的局部敏感哈希,不是密码学摘要。 |
| TLSH 相似度分数 | sgcTLSH_Diff | 两个 TLSH 摘要之间的距离;数值越低表示越相似。 |
在五个不同的曲线系列以及 RSA 上进行签名、验证和共享密钥推导。
| 能力 | 函数 | 说明 |
|---|---|---|
| Ed25519 签名 / 验证 | sgcEd25519_Sign / sgcEd25519_Verify | RFC 8032。32 字节公钥,64 字节签名。验证会拒绝非规范点以及第 5.1.7 节所规定的 S >= L 情形。 |
| X25519 密钥交换 | sgcX25519、sgcX25519_PublicKey、sgcX25519_SharedSecret | RFC 7748,基于 Curve25519 的 Diffie-Hellman。 |
| Ed448 签名 / 验证 | sgcEd448_GenerateKeyPair、sgcEd448_Sign、sgcEd448_Verify | RFC 8032,448 位(Goldilocks)EdDSA 曲线。 |
| X448 密钥交换 | sgcX448、sgcX448_PublicKey、sgcX448_SharedSecret | RFC 7748,基于 Curve448 的 Diffie-Hellman。 |
| secp256k1 | 使用 eccSecp256k1 的 sgcECDSA_SignHash / VerifyHash | 比特币/以太坊所用的曲线,SEC 2,位于 sgcCrypto_ECCurves 中。 |
| Brainpool P256r1 / P384r1 / P512r1 | 同一组函数,配合 eccBrainpoolP256r1 / P384r1 / P512r1 | RFC 5639,常见于欧盟 eIDAS 和政府配置文件。 |
| 确定性 ECDSA nonce | 内置于 sgcECDSA_SignHash | RFC 6979:nonce 由私钥和消息派生,没有 RNG 失效的风险。 |
| ECDH(secp256k1 / Brainpool) | sgcECDH_SharedSecret | 在同一四条曲线上计算共享密钥。 |
| 点压缩 | sgcEC_Compress / sgcEC_Decompress | 存储或传输更短的压缩公钥形式。 |
| EC 作为 JWS(ES256/384/512) | sgcECDSA_SignJWS / sgcECDSA_VerifyJWS | 根据所请求的位长自动选择曲线,可直接从 PEM 密钥签名/验证,是 ECCurves 面向 JOSE 的姊妹单元。 |
| 通用 ECDH | sgcECDH | 由原始私钥和对方公钥点计算共享密钥。 |
| 原始 / DER ECDSA 验证 | sgcECDSA_VerifyRaw / sgcECDSA_VerifyDER | 针对原始 (Qx, Qy, r, s) 元组或 DER 编码签名进行验证。 |
| RSA 签名(PKCS#1 v1.5) | sgcRSA_SignPKCS1 | 从 PEM 私钥出发,SHA-1/256/384/512 摘要。 |
| RSA 验证(PKCS#1 v1.5 / PSS) | sgcRSA_VerifyPKCS1、sgcRSA_VerifyPSS,以及基于模数/指数的 _Raw 变体 | RFC 8017。验证既可来自 PEM 密钥,也可来自原始模数和指数,无需构建密钥对象。 |
| RSA 密钥生成 | sgcRSA_GenerateKey | 任意请求的位长,Miller-Rabin 素性测试。 |
| RSA-OAEP 加密 | sgcRSA_OAEP_Encrypt / sgcRSA_OAEP_Decrypt | RFC 8017 最优非对称加密填充。 |
| RSA-PSS / PKCS#1 签名 | sgcRSA_PSS_Sign / Verify、sgcRSA_PKCS1_Sign / Verify | 直接从生成的 TsgcRSAPrivateKey 进行签名。 |
| RSA 密钥导出 | sgcRSA_ExportPrivateKeyPEM、sgcRSA_ExportPublicKeyPEM,以及对应的 DER 调用 | PKCS#1 和 SubjectPublicKeyInfo 编码。 |
| ECIES 封装 / 解封 | sgcECIES_GenerateKeyPair、sgcECIES_Seal、sgcECIES_Open | 面向 X25519 公钥的混合加密:临时 ECDH 加上一个 AEAD,每个方向仅需一次调用。 |
读取他人签发的证书,或自己生成一份,两者底层都有同一套 DER 编码器和解码器。
| 能力 | 函数 | 说明 |
|---|---|---|
| DER 读取器 | sgcASN1_Read、sgcASN1_Next、sgcASN1_Content | 逐个节点遍历 DER 结构。 |
| PEM 编解码器 | sgcPEM_Decode / sgcPEM_Encode | RFC 7468,包裹 DER 的 -----BEGIN ... -----END 格式。 |
| RSA 密钥解析 | sgcASN1_ParseRSAPrivateKey / PublicKey | PKCS#1(RFC 8017)密钥结构。 |
| EC 密钥解析 | sgcASN1_ParseECPrivateKey / PublicKey | SEC 1 密钥结构。 |
| 结构性 DER 写入 | sgcDER_Sequence、sgcDER_Set、sgcDER_Tagged、sgcDER_ContextExplicit / Implicit | 每个证书字段所依赖的基础构件。 |
| 数值型 DER 写入 | sgcDER_Integer、sgcDER_OctetString、sgcDER_BitString、sgcDER_Boolean、sgcDER_Null | 基本值编码器。 |
| 字符串与标识符 DER 写入 | sgcDER_OID、sgcDER_UTF8String、sgcDER_PrintableString、sgcDER_IA5String、sgcDER_Time | 对象标识符、X.509 使用的三种字符串类型,以及 UTCTime/GeneralizedTime。 |
| 证书解析 | sgcX509_Parse | 完整的证书结构:主题、颁发者、有效期、公钥、扩展项。 |
| 签名 / 证书链验证 | sgcX509_VerifySignedBy、sgcX509_VerifyChain | 验证一张证书是否由某个颁发者签发,或者遍历并验证一组 DER 证书。 |
| CRL 解析与吊销检查 | sgcX509_CRL_Parse、sgcX509_IsRevoked、sgcX509_CRL_VerifySignedBy | 解析证书吊销列表,并对照它检查某个序列号。 |
| 名称格式化 | sgcX509_SubjectRFC2253、sgcX509_IssuerRFC2253、sgcX509_SubjectOneLine | RFC 2253 可分辨名称字符串,用于日志记录和显示。 |
| 扩展项与 SAN | sgcX509_GetExtension、sgcX509_GetCRLDistributionURIs | 读取任意扩展 OID 以及 CRL 分发点 URI。 |
| 自签名证书生成 | sgcX509_CreateSelfSigned | 完整的 TsgcX509Options:主题 DN、有效期、序列号、带路径长度限制的 CA 标志、密钥用途、扩展密钥用途、主题备用名称(包括 IPv4 SAN)。 |
| PKCS#10 CSR 生成 | sgcX509_CreateCSR | 基于同一个选项记录生成 RFC 2986 证书签名请求。 |
| PEM 输出 | sgcX509_ToPEM | 将生成的 DER 包装为可直接保存的 PEM 文件。 |
NIST 于 2024 年 8 月定稿为 FIPS 203、204 和 205 的三种算法,外加为过渡期提供的一个混合组合器。
| 能力 | 函数 | 说明 |
|---|---|---|
| ML-KEM 密钥生成 | sgcMLKEM_GenerateKeyPair、sgcMLKEM_GenerateKeyPairFromSeed | FIPS 203,原名 Kyber。三种参数集:mlkem512、mlkem768、mlkem1024。 |
| ML-KEM 封装 | sgcMLKEM_Encapsulate、sgcMLKEM_EncapsulateWithSeed | 生成一个全新的 32 字节共享密钥以及携带它的密文。 |
| ML-KEM 解封装 | sgcMLKEM_Decapsulate | 永远不会失败:畸形密文会产生一个伪随机密钥(隐式拒绝),而不是报错,因此时序和错误行为都不会泄露任何信息。 |
| ML-KEM 尺寸 | sgcMLKEM_PublicKeySize、PrivateKeySize、CiphertextSize、SharedSecretSize | 每种参数集对应的字节长度,用于缓冲区分配。 |
| 混合 X25519 + ML-KEM | sgcHybrid_GenerateKeyPair、sgcHybrid_Encapsulate、sgcHybrid_Decapsulate | 通过一个 KDF 将经典和后量子共享密钥组合起来,因此结果的安全性永远不会弱于单独的 X25519。这是当前业界推荐的 ML-KEM 部署方式。 |
| ML-DSA 密钥生成 | sgcMLDSA_GenerateKeyPair、sgcMLDSA_GenerateKeyPairFromSeed | FIPS 204,原名 Dilithium。三种参数集:mldsa44、mldsa65、mldsa87。 |
| ML-DSA 签名 / 验证 | sgcMLDSA_Sign / sgcMLDSA_Verify | 按照 FIPS 204 接口进行确定性或随机化签名,并支持上下文字符串。 |
| ML-DSA 尺寸 | sgcMLDSA_PublicKeySize、PrivateKeySize、SignatureSize | 每种参数集对应的字节长度。 |
| SLH-DSA 密钥生成 | sgcSLHDSA_GenerateKeyPair、sgcSLHDSA_GenerateKeyPairFromSeed | FIPS 205,原名 SPHINCS+。无状态哈希签名:安全性完全依赖哈希函数本身,不依赖格或曲线假设。 |
| SLH-DSA 签名 / 验证 | sgcSLHDSA_Sign / sgcSLHDSA_Verify | 六种 SHAKE 参数集:slhShake128s、slhShake128f、slhShake192s、slhShake192f、slhShake256s、slhShake256f。s 系列偏向更小的签名,f 系列偏向更快的签名速度。 |
| SLH-DSA 尺寸与命名 | sgcSLHDSA_PublicKeySize、PrivateKeySize、SignatureSize、sgcSLHDSA_ParamsName | SLH-DSA 签名体积较大(根据参数集不同,从 7.8 KB 到 49 KB 不等);签名前请先确定缓冲区大小。 |
sgcCrypto 不声称支持 ed25519187 或 SPECK。ed25519187 没有公开发布的规范,而 SPECK 已于 2018 年从 ISO 标准化进程中撤回;本库均未实现这两者。
工具层:一次性验证码、其他分类共用的编码方式,以及 WinZip AES 加密。
| 能力 | 函数 | 说明 |
|---|---|---|
| HOTP | sgcHOTP | RFC 4226,基于计数器的一次性密码。 |
| TOTP | sgcTOTP、sgcTOTP_FromBase32 | RFC 6238,基于时间的一次性密码;Base32 变体可直接接受身份验证器应用显示的那种格式的密钥。 |
| TOTP 验证 | sgcTOTP_Verify | 在一个时间步长窗口内以恒定时间检查提交的验证码,因此结果及其所在的位置都不会通过时序泄露。它本身不阻止重放,由调用方跟踪已使用的验证码。 |
| 恒定时间比较 | sgcConstantTimeEquals | 贯穿整个库,用于标签和 MAC 比较。 |
| 安全清零 | sgcSecureZero | 覆写字节缓冲区,使密钥材料不会残留在内存中。 |
| 十六进制 | sgcHexEncode / sgcHexDecode | 小写十六进制,解码时不区分大小写。 |
| Base64url | sgcBase64UrlEncode / sgcBase64UrlDecode | RFC 4648 第 5 节,不带填充,JWT 和 JOSE 所用的编码方式。 |
| Base32 | sgcBase32Encode / sgcBase32Decode | RFC 4648 第 6 节,TOTP 密钥和身份验证器应用所用的编码方式。 |
| WinZip AES 密钥派生 | sgcZipAE2_DeriveKeys | 基于 PBKDF2,从密码和盐值派生密钥、认证密钥和密码验证器。 |
| WinZip AES 加密 / 解密 | sgcZipAE2_Encrypt / sgcZipAE2_Decrypt | AE-1 和 AE-2,AES-128/192/256,通过 TsgcZipAESStrength 指定每条目的盐值大小。 |
| WinZip 条目打包 | sgcZipAE2_PackEntry / sgcZipAE2_UnpackEntry | 将盐值、验证器、密文和认证码组合成磁盘上的存储布局。 |
| WinZip 附加字段 | sgcZipAE2_BuildExtraField / sgcZipAE2_ParseExtraField | 标记某个 ZIP 条目已被 AES 加密的 0x9901 附加字段。 |
| 传统哈希(仅供互操作) | sgcMD4、sgcMD5、sgcHMAC_MD5 | 为读取旧格式和协议而保留;请勿用于新设计。 |
| 传统密码(仅供互操作) | sgcDES_EncryptECB / sgcDES_DecryptECB、sgcDES_NTLM7to8 | DES-ECB 以及基于 DES 的 NTLM 密钥扩展步骤,两者均已被撤回(FIPS 46-3),仅为传统互操作而保留。 |
| 安全随机字节 | sgcRandomBytes / sgcRandomFill | MSWINDOWS 下使用 Windows CryptoAPI,其他平台使用 /dev/urandom,两种情况下都是同一次调用。 |
明确说明支持的范围。
| 方面 | 详情 |
|---|---|
| 操作系统 | 在 sgcVer.inc 中,没有任何 MSWINDOWS 防护,也没有任何其他平台防护包裹 SGC_CRYPTO。全部 43 个单元均可为 Win32、Win64、Linux64、macOS、iOS 和 Android 编译。 |
| 随机数来源 | 唯一一个感知平台的单元 sgcCrypto_Random,会为每个目标平台选择相应的 CSPRNG:MSWINDOWS 下使用 Windows CryptoAPI,POSIX 目标上使用 /dev/urandom,均隐藏在同一个 sgcRandomBytes 调用之后。 |
| Delphi | Delphi 7 至 RAD Studio 13 Florence。任何地方都不假设存在原生的 64 位整数类型:sgcCrypto_Int64 以及 sgcCrypto_BigInteger 中的 TsgcBigInt 类型模拟了哈希、曲线和后量子单元所需的运算。 |
| C++ Builder | 通过生成的头文件支持 C++ Builder,使用同一份源码树。 |
| 设计时占用 | 没有。没有 sgcCrypto_Reg.pas,没有任何东西被 RegisterComponents,也没有任何单元出现在组件面板页面上。 |
| 依赖项 | 没有 OpenSSL 绑定,没有外部 DLL。每个原语都直接在您所引用的单元中以 Object Pascal 实现。 |
| 源代码 | 每个付费版本都附带完整 Object Pascal 源代码,已包含 sgcCrypto 的版本包也是如此。 |
| 再分发 | 您构建的二进制文件可免版税再分发,没有按坐席或按服务器计费的运行时费用。 |