签名验签介绍及算法规格
===========

当需要判断接收的数据是否被篡改、数据是否为指定对象发送的数据时，可以使用签名验签操作。

接下来将说明系统目前支持的算法及其对应的规格。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e7/v3/5sIqhfhBQ0mFzJy9O-BQSg/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132405Z&HW-CC-Expire=86400&HW-CC-Sign=81D310A9C2E48385272205B7C7E2BA3D6388C10563419C921E5018D79D092559)

当前使用C/C++的方式从API version 12开始支持验签，从API version 20开始支持签名。

#### RSA

算法库框架目前提供了两种RSA签名验签的填充模式：

*   [PKCS1](#填充模式为pkcs1)：即RFC3447规范中的RSAES-PKCS1-V1\_5模式，对应OpenSSL中的RSA\_PKCS1\_PADDING。
    
    使用该模式时需要设置摘要（md），摘要算法输出的长度需要小于RSA密钥长度。例如RSA2048的密钥字节长度为256。
    
*   [PSS](#填充模式为pss)： 即RFC3447规范中的RSASSA-PSS模式，对应OpenSSL中的RSA\_PKCS1\_PSS\_PADDING。
    
    使用该模式时需要设置两个摘要（md和mgf1\_md），且md摘要字节长度 + saltLen + 2 需要小于等于RSA的密钥长度。
    
    此模式还可额外设置盐值长度saltLen，并用于获取PSS的相关参数。（单位：字节）
    
    | PSS的相关参数 | 说明 |
    | :-- | :-- |
    | md | 摘要算法。 |
    | mgf | 掩码生成算法，目前仅支持MGF1。 |
    | mgf1\_md | MGF1算法中使用的摘要算法。 |
    | saltLen | 盐值长度。（单位：字节） |
    | trailer\_field | 用于编码操作的整数，只支持为1。 |
    

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/a4/v3/wA6ntYPuRvGug0KoKClQEA/caution_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132405Z&HW-CC-Expire=86400&HW-CC-Sign=4402613B688F397637B30D894DB869D12E01E4CC0ACF6537B2306E7B5F44978D)

使用同步接口生成RSA2048、RSA3072、RSA4096、RSA8192非对称密钥或者明文长度超过2048会导致耗时增加。

由于系统对主线程有时间限制，耗时较长会导致失败，建议开发者在生成位数较大的密钥时，使用对应的异步接口或是[使用多线程并发能力](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/multi-thread-concurrency-overview)进行开发。

#### \[h2\]填充模式为PKCS1

以字符串参数完成RSA签名验签，具体的“字符串参数”由“非对称密钥类型”、“填充模式 PKCS1”和“摘要”使用符号“|”拼接而成，用于在创建非对称签名验签实例时，指定非对称签名验签算法规格。

如表所示，各取值范围（即\[\]中的内容）中，只能选取一项完成字符串拼接。举例说明，当需要非对称密钥类型为RSA512、填充模式为PKCS1、摘要算法为MD5的密钥时，其字符串参数为"RSA512|PKCS1|MD5"。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/7c/v3/m1rGZy2tRIKBp6SEPX0UXg/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132405Z&HW-CC-Expire=86400&HW-CC-Sign=B8D1D3342D0E6161BD60125827649AFB46A608A9B9B46221DCBA3603B4A2F8C8)

RSA签名验签时，摘要算法输出的长度，需要小于RSA的密钥长度。如RSA密钥为512位时，不支持SHA512。

| 非对称密钥类型 | 填充模式 | 摘要算法 | API版本 |
| :-- | :-- | :-- | :-- |
| RSA512 | PKCS1 | \[MD5|SHA1|SHA224|SHA256|SHA384\] | 9+ |
| RSA768 | PKCS1 | \[MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | 9+ |
| RSA1024 | PKCS1 | \[MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | 9+ |
| RSA2048 | PKCS1 | \[MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | 9+ |
| RSA3072 | PKCS1 | \[MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | 9+ |
| RSA4096 | PKCS1 | \[MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | 9+ |
| RSA8192 | PKCS1 | \[MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | 9+ |
| RSA | PKCS1 | 符合长度要求的摘要算法 | 10+ |

如表中最后一行所示，为了兼容由密钥参数生成的密钥，RSA签名验签参数输入密钥类型时支持不带长度，签名验签运算取决于实际输入的密钥长度。

#### \[h2\]填充模式为PSS

以字符串参数完成RSA签名验签，具体的“字符串参数”由“非对称密钥类型”、“填充模式 PSS”、“摘要”和“掩码摘要”使用符号“|”拼接而成，用于在创建非对称签名验签实例时，指定非对称签名验签算法规格。

如表所示，各取值范围（即\[\]中的内容）中，只能选取一项完成字符串拼接。举例说明，当需要非对称密钥类型为RSA2048、填充模式为PSS、摘要算法为SHA256、掩码摘要为MGF1\_SHA256的密钥时，其字符串参数为"RSA2048|PSS|SHA256|MGF1\_SHA256"。

| 非对称密钥类型 | 填充模式 | 摘要 | 掩码摘要 | API版本 |
| :-- | :-- | :-- | :-- | :-- |
| RSA512 | PSS | MD5 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256\] | 9+ |
| RSA512 | PSS | SHA1 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256\] | 9+ |
| RSA512 | PSS | SHA224 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256\] | 9+ |
| RSA512 | PSS | SHA256 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224\] | 9+ |
| RSA768 | PSS | MD5 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA768 | PSS | SHA1 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA768 | PSS | SHA224 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA768 | PSS | SHA256 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384\] | 9+ |
| RSA768 | PSS | SHA384 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256\] | 9+ |
| RSA768 | PSS | SHA512 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224\] | 9+ |
| RSA1024 | PSS | MD5 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA1024 | PSS | SHA1 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA1024 | PSS | SHA224 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA1024 | PSS | SHA256 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA1024 | PSS | SHA384 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA1024 | PSS | SHA512 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384\] | 9+ |
| RSA2048 | PSS | MD5 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA2048 | PSS | SHA1 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA2048 | PSS | SHA224 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA2048 | PSS | SHA256 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA2048 | PSS | SHA384 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA2048 | PSS | SHA512 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA3072 | PSS | MD5 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA3072 | PSS | SHA1 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA3072 | PSS | SHA224 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA3072 | PSS | SHA256 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA3072 | PSS | SHA384 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA3072 | PSS | SHA512 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA4096 | PSS | MD5 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA4096 | PSS | SHA1 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA4096 | PSS | SHA224 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA4096 | PSS | SHA256 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA4096 | PSS | SHA384 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA4096 | PSS | SHA512 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA8192 | PSS | MD5 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA8192 | PSS | SHA1 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA8192 | PSS | SHA224 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA8192 | PSS | SHA256 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA8192 | PSS | SHA384 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA8192 | PSS | SHA512 | \[MGF1\_MD5|MGF1\_SHA1|MGF1\_SHA224|MGF1\_SHA256|MGF1\_SHA384|MGF1\_SHA512\] | 9+ |
| RSA | PSS | 符合长度要求的摘要算法 | MGF1\_符合长度要求的摘要算法 | 10+ |

如表中最后一行所示，为了兼容由密钥参数生成的密钥，RSA签名验签参数输入密钥类型时支持不带长度，签名验签运算取决于实际输入的密钥长度。

#### \[h2\]获取/设置PSS填充模式的参数

当前支持RSA使用PSS填充模式时，获取、设置相关参数，“√”表示支持对获取或设置该参数。

| PSS参数 | 枚举值 | 获取 | 设置 |
| :-- | :-- | :-- | :-- |
| md | PSS\_MD\_NAME\_STR | √ | \- |
| mgf | PSS\_MGF\_NAME\_STR | √ | \- |
| mgf1\_md | PSS\_MGF1\_MD\_STR | √ | \- |
| saltLen | PSS\_SALT\_LEN\_NUM | √ | √ |
| trailer\_field | PSS\_TRAILER\_FIELD\_NUM | √ | \- |

#### \[h2\]PKCS1模式下的OnlySign/OnlyVerify

算法库框架目前提供了RSA签名不做摘要仅签名功能，同时从API版本26.0.0开始也支持不做摘要的验签能力。

以字符串参数完成RSA签名，具体的“字符串参数”由“非对称密钥类型”、“填充模式”、“摘要”和“签名模式”或“验签模式”使用符号“|”拼接而成，用于在创建非对称签名实例时，指定非对称签名算法规格。

如表所示，各取值范围（即\[\]中的内容）中，只能选取一项完成字符串拼接。举例说明，当需要非对称密钥类型为RSA2048、填充模式为PKCS1、摘要算法为SHA256、签名模式为OnlySign的密钥时，其字符串参数为"RSA2048|PKCS1|SHA256|OnlySign"，验签模式为OnlyVerify的密钥时，其字符串参数为"RSA2048|PKCS1|SHA256|OnlyVerify"。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/fc/v3/a2QXDrmTRQ6DGTuqgrESqQ/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132405Z&HW-CC-Expire=86400&HW-CC-Sign=0A7DE2E6ABB10EE7C352C0D21E1F44AE0A5178117DF64061D379DCE136D357E9)

RSA仅签名时，对待签名数据有长度要求：

1.  PKCS1填充模式，NoHash不设置摘要算法，数据需要小于RSA密钥字节长度-11（PKCS1填充长度）。
2.  PKCS1填充模式，设置任意摘要算法，待签名的数据必须是对应的摘要数据。
3.  NoPadding不设置填充模式，NoHash不设置摘要算法，待签名的数据长度需要等于RSA密钥字节长度，且其数值小于RSA模数。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/cf/v3/ayIsgEsSScKUHk2kNPLJxQ/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132405Z&HW-CC-Expire=86400&HW-CC-Sign=B3FC9AE950A9EA4CFDC04F4DD2DA5EAFA1383011D6FE4694C5EAE8DE38A253FD)

从API版本26.0.0开始，支持OnlyVerify模式。

| 非对称密钥类型 | 填充模式 | 摘要算法 | 签名/验签模式 | API版本 |
| :-- | :-- | :-- | :-- | :-- |
| RSA512 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256\] | OnlySign/OnlyVerify | 12+ |
| RSA768 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 12+ |
| RSA1024 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 12+ |
| RSA2048 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 12+ |
| RSA3072 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 12+ |
| RSA4096 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 12+ |
| RSA8192 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 12+ |
| \[RSA512|RSA768|RSA1024|RSA2048|RSA3072|RSA4096|RSA8192|RSA\] | NoPadding | NoHash | OnlySign/OnlyVerify | 12+ |
| RSA | PKCS1 | 符合长度要求的摘要算法 | OnlySign/OnlyVerify | 12+ |

如表中最后一行所示，为兼容由密钥参数生成的密钥，RSA签名/验签在输入密钥类型时可不指定位数（即使用RSA）。此时算法规格是否支持，以签名/验签初始化时传入密钥的实际位数为准。例如，使用RSA|PKCS1|SHA384时，若初始化传入的是RSA512密钥，则因不满足长度约束，不支持该规格。

#### \[h2\]PSS模式下的OnlySign/OnlyVerify

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/cc/v3/_J-vA55MSj-JCpDpGgV2NQ/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132405Z&HW-CC-Expire=86400&HW-CC-Sign=F89F6E945CAD2203C06AD0DFB49CD0E0712529EEF9205B011A5B2A5BB339FCF1)

从API版本26.0.0开始，支持PSS模式的OnlySign/OnlyVerify。

使用的非对称密钥类型、摘要与掩码摘要取值范围、以及长度限制要求与上文PSS模式签名验签规格保持一致。

PSS模式的OnlySign/OnlyVerify规格与PSS签名验签规格一致，仅在字符串参数末尾追加签名/验签模式。

字符串参数格式："非对称密钥类型|PSS|摘要|掩码摘要|签名/验签模式"。

举例说明，当需要非对称密钥类型为RSA2048、填充模式为PSS、摘要算法为SHA256、掩码摘要为MGF1\_SHA256、签名模式为OnlySign的密钥时，其字符串参数为"RSA2048|PSS|SHA256|MGF1\_SHA256|OnlySign"；验签模式为OnlyVerify时，其字符串参数为"RSA2048|PSS|SHA256|MGF1\_SHA256|OnlyVerify"。

#### \[h2\]验签模式为Recover

算法库框架目前提供了RSA签名恢复原始数据功能。

以字符串参数完成RSA签名恢复，具体的“字符串参数”由“非对称密钥类型”、“填充模式”、“摘要”和“验签模式”使用符号“|”拼接而成，用于在创建非对称验签实例时，指定非对称验签算法规格。

如表所示，各取值范围（即\[\]中的内容）中，只能选取一项完成字符串拼接。举例说明，当需要非对称密钥类型为RSA2048、填充模式为PKCS1、摘要算法为SHA256、验签模式为Recover的密钥时，其字符串参数为"RSA2048|PKCS1|SHA256|Recover"。

| 非对称密钥类型 | 填充模式 | 摘要算法 | 验签模式 | API版本 |
| :-- | :-- | :-- | :-- | :-- |
| RSA512 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256\] | Recover | 12+ |
| RSA768 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | Recover | 12+ |
| RSA1024 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | Recover | 12+ |
| RSA2048 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | Recover | 12+ |
| RSA3072 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | Recover | 12+ |
| RSA4096 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | Recover | 12+ |
| RSA8192 | PKCS1 | \[NoHash|MD5|SHA1|SHA224|SHA256|SHA384|SHA512\] | Recover | 12+ |
| \[RSA512|RSA768|RSA1024|RSA2048|RSA3072|RSA4096|RSA8192|RSA\] | NoPadding | NoHash | Recover | 12+ |
| RSA | PKCS1 | 符合长度要求的摘要算法 | Recover | 12+ |

如表中最后一行所示，为了兼容由密钥参数生成的密钥，RSA签名恢复参数输入密钥类型时支持不带长度，签名恢复运算取决于实际输入的密钥长度。

#### ECDSA

ECDSA（Elliptic Curve Digital Signature Algorithm，椭圆曲线数字签名算法）是基于椭圆曲线密码（ECC）的数字签名算法（DSA）。相比DLP（Discrete Logarithm Problem，离散对数问题）和IFP（Integer Factorization Problem，大数分解问题），椭圆曲线密码的单位比特强度要高于其他公钥体制。

算法库框架提供了多种椭圆曲线及摘要算法组合的ECDSA签名验签能力，同时支持OnlySign和OnlyVerify模式。

以字符串参数完成ECDSA签名验签，具体的“字符串参数”由“非对称密钥类型”和“摘要”使用符号“|”拼接而成，用于在创建非对称签名验签实例时，指定非对称签名验签算法规格。

如表所示，各取值范围（即\[\]中的内容）中，只能选取一项完成字符串拼接。举例说明，当需要非对称密钥类型为ECC224、摘要算法为SHA256的密钥时，其字符串参数为"ECC224|SHA256"，OnlySign和OnlyVerify模式下的签名验签，其字符串参数为"ECC224|SHA256|OnlySign"和"ECC224|SHA256|OnlyVerify"。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/d3/v3/Qa70UovXSj6CcTEXhfpqjQ/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132405Z&HW-CC-Expire=86400&HW-CC-Sign=9C6FAFFDA543184A13A852666A123A9D8554DBA9CB41B2F59224AA2D9104EB91)

从API版本26.0.0开始，支持ECC的OnlySign/OnlyVerify。

不支持空消息的验签。

| 非对称密钥类型 | 摘要 | 签名/验签模式 | API版本 |
| :-- | :-- | :-- | :-- |
| ECC192 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 26.0.0+ |
| ECC224 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 9+ |
| ECC256 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 9+ |
| ECC384 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 9+ |
| ECC521 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 9+ |
| ECC\_BrainPoolP160r1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP160t1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP192r1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP192t1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP224r1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP224t1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP256r1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP256t1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP320r1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP320t1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP384r1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP384t1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP512r1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_BrainPoolP512t1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 11+ |
| ECC\_Secp256k1 | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 14+ |
| ECC | \[SHA1|SHA224|SHA256|SHA384|SHA512\] | OnlySign/OnlyVerify | 10+ |

如表中最后一行所示，为了兼容由密钥参数生成的密钥，ECDSA签名验签参数输入密钥类型时支持不指定长度和曲线，签名验签运算取决于实际输入的密钥。

#### DSA

DSA（Digital Signature Algorithm，数字签名算法）的安全性基于整数有限域离散对数问题的困难性，具有较好的兼容性和适用性。

以字符串参数完成DSA签名验签，具体的“字符串参数”由“非对称密钥类型”和“摘要”使用符号“|”拼接而成，用于在创建非对称签名验签实例时，指定非对称签名验签算法规格。

如表所示，各取值范围（即\[\]中的内容）中，只能选取一项完成字符串拼接。举例说明，当需要非对称密钥类型为DSA1024、摘要算法为SHA256的密钥时，其字符串参数为"DSA1024|SHA256"。

| 非对称密钥类型 | 摘要 | API版本 |
| :-- | :-- | :-- |
| DSA1024 | \[NoHash|SHA1|SHA224|SHA256|SHA384|SHA512\] | 10+ |
| DSA2048 | \[NoHash|SHA1|SHA224|SHA256|SHA384|SHA512\] | 10+ |
| DSA3072 | \[NoHash|SHA1|SHA224|SHA256|SHA384|SHA512\] | 10+ |
| DSA | \[NoHash|SHA1|SHA224|SHA256|SHA384|SHA512\] | 10+ |

如表中最后一行所示，为了兼容由密钥参数生成的密钥，DSA签名验签参数输入密钥类型时支持不带长度，签名验签运算取决于实际输入的密钥长度。

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/9e/v3/ssIqrdSeQkK1A9LtrEvaCw/note_3.0-zh-cn.png?HW-CC-KV=V1&HW-CC-Date=20260709T132405Z&HW-CC-Expire=86400&HW-CC-Sign=36FAF8D10DE9A5F39293CC89938A35C577A729E1538E15ED688D3EF1AB40443E)

当使用DSA算法并设置摘要算法为NoHash时，则不支持分段签名或分段验签。

#### SM2

SM2数字签名算法，是基于椭圆曲线的签名验签算法。

以字符串参数完成SM2签名验签，具体的“字符串参数”由“非对称密钥类型”和“摘要”使用符号“|”拼接而成，用于在创建非对称签名验签实例时，指定非对称签名验签算法规格。

当前SM2签名只支持SM3摘要。

| 非对称密钥类型 | 摘要 | 字符串参数 | API版本 |
| :-- | :-- | :-- | :-- |
| SM2\_256 | SM3 | SM2\_256|SM3 | 10+ |
| SM2 | SM3 | SM2|SM3 | 10+ |

如表中最后一行所示，为了兼容由密钥参数生成的密钥，SM2签名验签参数输入密钥类型时支持不带长度，签名验签运算取决于实际输入的密钥长度。

#### Ed25519

Ed25519是基于椭圆曲线的签名验签算法。

以字符串参数完成Ed25519签名验签，用于在创建非对称签名验签实例时，指定非对称签名验签算法规格。

| 非对称密钥类型 | 字符串参数 | API版本 |
| :-- | :-- | :-- |
| Ed25519 | Ed25519 | 11+ |