Class SM2
SM2是中国国家标准的非对称加密算法,用于保护数据的机密性和完整性
本类提供了SM2加密、解密、签名、验证等功能
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription生成SM2密钥对并返回Base64编码的密钥对对象base64ToPrivateKey(String base64PrivateKey) 将Base64编码的私钥字符串转换为PrivateKey对象base64ToPublicKey(String base64PublicKey) 将Base64编码的公钥字符串转换为PublicKey对象使用Base64格式的SM2私钥解密数据decrypt(String encryptedData, PrivateKey privateKey) 使用SM2私钥解密数据decryptByHex(String encryptedData, String hexPrivateKey) 使用Hex格式的SM2私钥解密数据使用Base64格式的SM2公钥加密数据使用SM2公钥加密数据encryptByHex(String data, String hexPublicKey) 使用Hex格式的SM2公钥加密数据生成SM2非对称加密算法的密钥对getPrivateKeyHex(KeyPair keyPair) 从KeyPair中提取私钥并转换为Hex格式的原始私钥字符串getPublicKeyHex(KeyPair keyPair) 从KeyPair中提取公钥并转换为Hex格式的原始公钥字符串生成SM2密钥对并返回Hex编码的密钥对对象hexToPrivateKey(String hexPrivateKey) 将Hex格式的私钥字符串转换为PrivateKey对象hexToPublicKey(String hexPublicKey) 将Hex格式的公钥字符串转换为PublicKey对象privateKeyToBase64(PrivateKey privateKey) 将PrivateKey对象转换为Base64编码的字符串publicKeyToBase64(PublicKey publicKey) 将PublicKey对象转换为Base64编码的字符串sign(String data, PrivateKey privateKey) 使用SM2私钥对数据进行签名signByBase64(String data, String base64PrivateKey) 使用Base64格式的SM2私钥对数据进行签名使用Hex格式的SM2私钥对数据进行签名boolean使用SM2公钥验证签名(签名格式为R.S字符串)booleanverify(String data, SM2.SM2Signature signature, PublicKey publicKey) 使用SM2公钥验证签名的有效性booleanverifyByBase64(String data, String signatureStr, String base64PublicKey) 使用Base64格式的SM2公钥验证签名(签名格式为R.S字符串)booleanverifyByBase64(String data, SM2.SM2Signature signature, String base64PublicKey) 使用Base64格式的SM2公钥验证签名booleanverifyByHex(String data, String signatureStr, String hexPublicKey) 使用Hex格式的SM2公钥验证签名(签名格式为R.S字符串)booleanverifyByHex(String data, SM2.SM2Signature signature, String hexPublicKey) 使用Hex格式的SM2公钥验证签名
-
Constructor Details
-
SM2
public SM2()
-
-
Method Details
-
generateKeyPair
-
base64KeyPair
生成SM2密钥对并返回Base64编码的密钥对对象该方法首先调用
generateKeyPair()生成密钥对,然后将公钥和私钥分别转换为Base64编码字符串 公钥采用X.509格式编码,私钥采用PKCS#8格式编码- Returns:
- 包含Base64编码公钥和私钥的
KeyPair对象;生成失败返回 null - See Also:
-
hexKeyPair
生成SM2密钥对并返回Hex编码的密钥对对象该方法首先调用
generateKeyPair()生成密钥对,然后将公钥和私钥分别转换为Hex编码字符串 公钥采用X.509格式编码(以0x30开头),私钥采用PKCS#8格式编码- Returns:
- 包含Hex编码公钥和私钥的
KeyPair对象;生成失败返回 null - See Also:
-
publicKeyToBase64
-
base64ToPublicKey
-
privateKeyToBase64
将PrivateKey对象转换为Base64编码的字符串私钥编码格式为PKCS#8格式,生成的Base64字符串不含换行符
- Parameters:
privateKey- PrivateKey对象(SM2算法的私钥)- Returns:
- Base64编码的私钥字符串(PKCS#8格式);若输入为null则返回null
- See Also:
-
base64ToPrivateKey
将Base64编码的私钥字符串转换为PrivateKey对象转换步骤: 1. Base64解码获取原始字节数组 2. 构建PKCS#8格式的密钥规范 3. 使用BouncyCastle提供者创建EC算法密钥工厂 4. 根据密钥规范生成PrivateKey对象
- Parameters:
base64PrivateKey- Base64编码的私钥字符串(必须为PKCS#8格式)- Returns:
- 转换后的PrivateKey对象(SM2算法的私钥);转换失败返回null
- See Also:
-
getPublicKeyHex
-
getPrivateKeyHex
-
hexToPublicKey
-
hexToPrivateKey
将Hex格式的私钥字符串转换为PrivateKey对象支持两种输入格式:
- 完整PKCS#8格式:以0x30开头的ASN.1编码
- 原始私钥格式:64字符(32字节)的大整数D值
对于原始私钥格式,内部会自动进行高位零填充,确保32字节长度 然后使用SM2椭圆曲线参数(sm2p256v1)构建ECPrivateKeySpec
- Parameters:
hexPrivateKey- Hex格式的私钥字符串- Returns:
- 转换后的PrivateKey对象(SM2算法的私钥);转换失败返回null
- See Also:
-
encrypt
使用SM2公钥加密数据使用BouncyCastle的SM2算法进行加密,明文数据采用UTF-8编码 加密结果使用Base64编码返回,便于传输和存储
- Parameters:
data- 待加密的明文数据(UTF-8字符串),不可为 null 或空字符串publicKey- SM2公钥对象- Returns:
- Base64编码的加密密文
- Throws:
IllegalArgumentException- 当明文为 null 或空字符串时(SM2 不支持空输入)- See Also:
-
encryptByHex
使用Hex格式的SM2公钥加密数据该方法是便捷方法,内部先调用
hexToPublicKey(String)将Hex格式公钥转换为PublicKey对象, 然后调用encrypt(String, PublicKey)进行加密- Parameters:
data- 待加密的明文数据(UTF-8字符串)hexPublicKey- Hex格式的公钥字符串(支持完整X.509格式或128字符原始格式)- Returns:
- Base64编码的加密密文;公钥转换失败或加密失败返回null
- See Also:
-
encrypt
使用Base64格式的SM2公钥加密数据该方法是便捷方法,内部先调用
base64ToPublicKey(String)将Base64格式公钥转换为PublicKey对象, 然后调用encrypt(String, PublicKey)进行加密- Parameters:
data- 待加密的明文数据(UTF-8字符串)base64PublicKey- Base64编码的公钥字符串(X.509格式)- Returns:
- Base64编码的加密密文;公钥转换失败或加密失败返回null
- See Also:
-
decrypt
使用SM2私钥解密数据使用BouncyCastle的SM2算法进行解密,密文数据采用Base64编码 解密结果使用UTF-8编码转换为字符串
- Parameters:
encryptedData- Base64编码的加密密文privateKey- SM2私钥对象- Returns:
- 解密后的明文数据(UTF-8字符串);解密失败返回null
- See Also:
-
decryptByHex
使用Hex格式的SM2私钥解密数据该方法是便捷方法,内部先调用
hexToPrivateKey(String)将Hex格式私钥转换为PrivateKey对象, 然后调用decrypt(String, PrivateKey)进行解密- Parameters:
encryptedData- Base64编码的加密密文hexPrivateKey- Hex格式的私钥字符串(支持完整PKCS#8格式或64字符原始格式)- Returns:
- 解密后的明文数据(UTF-8字符串);私钥转换失败或解密失败返回null
- See Also:
-
decrypt
使用Base64格式的SM2私钥解密数据该方法是便捷方法,内部先调用
base64ToPrivateKey(String)将Base64格式私钥转换为PrivateKey对象, 然后调用decrypt(String, PrivateKey)进行解密- Parameters:
encryptedData- Base64编码的加密密文base64PrivateKey- Base64编码的私钥字符串(PKCS#8格式)- Returns:
- 解密后的明文数据(UTF-8字符串);私钥转换失败或解密失败返回null
- See Also:
-
sign
使用SM2私钥对数据进行签名使用SM3WithSM2签名算法(SM3哈希算法+SM2签名算法)进行签名 签名结果为DER格式,内部解析为r和s两个分量,封装为SM2Signature对象返回 明文数据采用UTF-8编码
- Parameters:
data- 待签名的数据(UTF-8字符串)privateKey- SM2私钥对象- Returns:
- 签名结果对象(包含r和s两个Hex格式分量);签名失败返回null
- See Also:
-
verify
使用SM2公钥验证签名的有效性使用SM3WithSM2签名算法验证签名,将签名的r和s分量组装为DER格式后进行验证 明文数据采用UTF-8编码
- Parameters:
data- 待验证的数据(UTF-8字符串)signature- 签名结果对象(包含r和s两个分量)publicKey- SM2公钥对象- Returns:
- 签名验证结果,验证通过返回true,验证失败或异常返回false
- See Also:
-
signByBase64
使用Base64格式的SM2私钥对数据进行签名该方法是便捷方法,内部先调用
base64ToPrivateKey(String)将Base64格式私钥转换为PrivateKey对象, 然后调用sign(String, PrivateKey)进行签名- Parameters:
data- 待签名的数据(UTF-8字符串)base64PrivateKey- Base64编码的私钥字符串(PKCS#8格式)- Returns:
- 签名结果对象(包含r和s两个Hex格式分量);私钥转换失败或签名失败返回null
- See Also:
-
signByHex
使用Hex格式的SM2私钥对数据进行签名该方法是便捷方法,内部先调用
hexToPrivateKey(String)将Hex格式私钥转换为PrivateKey对象, 然后调用sign(String, PrivateKey)进行签名- Parameters:
data- 待签名的数据(UTF-8字符串)hexPrivateKey- Hex格式的私钥字符串(支持完整PKCS#8格式或64字符原始格式)- Returns:
- 签名结果对象(包含r和s两个Hex格式分量);私钥转换失败或签名失败返回null
- See Also:
-
verifyByBase64
使用Base64格式的SM2公钥验证签名该方法是便捷方法,内部先调用
base64ToPublicKey(String)将Base64格式公钥转换为PublicKey对象, 然后调用verify(String, SM2Signature, PublicKey)进行签名验证- Parameters:
data- 待验证的数据(UTF-8字符串)signature- 签名结果对象(包含r和s两个分量)base64PublicKey- Base64编码的公钥字符串(X.509格式)- Returns:
- 签名验证结果,验证通过返回true,验证失败或异常返回false
- See Also:
-
verifyByHex
使用Hex格式的SM2公钥验证签名该方法是便捷方法,内部先调用
hexToPublicKey(String)将Hex格式公钥转换为PublicKey对象, 然后调用verify(String, SM2Signature, PublicKey)进行签名验证- Parameters:
data- 待验证的数据(UTF-8字符串)signature- 签名结果对象(包含r和s两个分量)hexPublicKey- Hex格式的公钥字符串(支持完整X.509格式或128字符原始格式)- Returns:
- 签名验证结果,验证通过返回true,验证失败或异常返回false
- See Also:
-
verifyByBase64
使用Base64格式的SM2公钥验证签名(签名格式为R.S字符串)该方法是便捷方法,内部先调用
SM2.SM2Signature.parse(String)将签名字符串解析为SM2Signature对象, 然后调用base64ToPublicKey(String)将Base64格式公钥转换为PublicKey对象, 最后调用verify(String, SM2Signature, PublicKey)进行签名验证- Parameters:
data- 待验证的数据(UTF-8字符串)signatureStr- 签名字符串,格式为 "R.S"(R和S用点号连接)base64PublicKey- Base64编码的公钥字符串(X.509格式)- Returns:
- 签名验证结果,验证通过返回true,签名格式错误、公钥转换失败、验证失败或异常返回false
- See Also:
-
verifyByHex
使用Hex格式的SM2公钥验证签名(签名格式为R.S字符串)该方法是便捷方法,内部先调用
SM2.SM2Signature.parse(String)将签名字符串解析为SM2Signature对象, 然后调用hexToPublicKey(String)将Hex格式公钥转换为PublicKey对象, 最后调用verify(String, SM2Signature, PublicKey)进行签名验证- Parameters:
data- 待验证的数据(UTF-8字符串)signatureStr- 签名字符串,格式为 "R.S"(R和S用点号连接)hexPublicKey- Hex格式的公钥字符串(支持完整X.509格式或128字符原始格式)- Returns:
- 签名验证结果,验证通过返回true,签名格式错误、公钥转换失败、验证失败或异常返回false
- See Also:
-
verify
使用SM2公钥验证签名(签名格式为R.S字符串)该方法是便捷方法,内部先调用
SM2.SM2Signature.parse(String)将签名字符串解析为SM2Signature对象, 然后调用verify(String, SM2Signature, PublicKey)进行签名验证- Parameters:
data- 待验证的数据(UTF-8字符串)signatureStr- 签名字符串,格式为 "R.S"(R和S用点号连接)publicKey- SM2公钥对象- Returns:
- 签名验证结果,验证通过返回true,签名格式错误、验证失败或异常返回false
- See Also:
-