Package org.aoju.bus.crypto.asymmetric
Class SM2
- All Implemented Interfaces:
Serializable,Decryptor,Encryptor
国密算法-SM2
- 非对称加密和签名:SM2
- 摘要签名算法:SM3
- 对称加密:SM4
- Since:
- Java 17+
- Author:
- Kimi Liu
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected org.bouncycastle.crypto.engines.SM2Engineprotected org.bouncycastle.crypto.signers.SM2SignerFields inherited from class org.aoju.bus.crypto.asymmetric.Asymmetric
algorithm, lock, privateKey, publicKey -
Constructor Summary
ConstructorsConstructorDescriptionSM2()构造,生成新的私钥公钥对SM2(byte[] privateKey, byte[] publicKey) 构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密SM2(byte[] privateKey, byte[] publicKeyPointX, byte[] publicKeyPointY) 构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密SM2(PrivateKey privateKey, PublicKey publicKey) 构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密SM2(org.bouncycastle.crypto.params.ECPrivateKeyParameters privateKeyParams, org.bouncycastle.crypto.params.ECPublicKeyParameters publicKeyParams) 构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密 -
Method Summary
Modifier and TypeMethodDescriptionbyte[]decrypt(byte[] data) 使用私钥解密byte[]解密byte[]decrypt(byte[] data, org.bouncycastle.crypto.CipherParameters privateKeyParameters) 解密byte[]encrypt(byte[] data) 使用公钥加密,SM2非对称加密的结果由C1,C3,C2三部分组成,其中:byte[]加密,SM2非对称加密的结果由C1,C3,C2三部分组成,其中:byte[]encrypt(byte[] data, org.bouncycastle.crypto.CipherParameters pubKeyParameters) 加密,SM2非对称加密的结果由C1,C2,C3三部分组成,其中:byte[]getD()获得私钥D值(编码后的私钥)获得私钥D值getDHex()获得私钥D值(编码后的私钥)byte[]getQ(boolean isCompressed) 获得公钥Q值(编码后的公钥)init()初始化 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密(签名)或者解密(校验)initKeys()生成公钥和私钥setDigest(org.bouncycastle.crypto.Digest digest) 设置Hash算法setEncoding(org.bouncycastle.crypto.signers.DSAEncoding encoding) 设置DSA signatures的编码setMode(org.bouncycastle.crypto.engines.SM2Engine.Mode mode) 设置SM2模式,旧版是C1C2C3,新版本是C1C3C2setPrivateKey(PrivateKey privateKey) 设置私钥setPrivateKeyParams(org.bouncycastle.crypto.params.ECPrivateKeyParameters privateKeyParams) 设置私钥参数setPublicKey(PublicKey publicKey) 设置公钥setPublicKeyParams(org.bouncycastle.crypto.params.ECPublicKeyParameters publicKeyParams) 设置公钥参数byte[]sign(byte[] data) 用私钥对信息生成数字签名,签名格式为ASN1 * 在硬件签名中,返回结果为R+S,可以通过调用Builder.rsAsn1ToPlain(byte[])方法转换之。byte[]sign(byte[] data, byte[] id) 用私钥对信息生成数字签名,签名格式为ASN1 在硬件签名中,返回结果为R+S,可以通过调用Builder.rsAsn1ToPlain(byte[])方法转换之。用私钥对信息生成数字签名用私钥对信息生成数字签名设置DSA signatures的编码为PlainDSAEncodingbooleanverify(byte[] data, byte[] sign) 用公钥检验数字签名的合法性booleanverify(byte[] data, byte[] sign, byte[] id) 用公钥检验数字签名的合法性boolean用公钥检验数字签名的合法性boolean用公钥检验数字签名的合法性Methods inherited from class org.aoju.bus.crypto.asymmetric.Asymmetric
getKeyByType, getPrivateKey, getPrivateKeyBase64, getPublicKey, getPublicKeyBase64, init, setKeyMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.aoju.bus.crypto.asymmetric.Decryptor
decrypt, decrypt, decryptString, decryptStringMethods inherited from interface org.aoju.bus.crypto.asymmetric.Encryptor
encrypt, encrypt, encrypt, encrypt, encryptBase64, encryptBase64, encryptBase64, encryptBase64, encryptHex, encryptHex, encryptHex, encryptHex
-
Field Details
-
engine
protected org.bouncycastle.crypto.engines.SM2Engine engine -
signer
protected org.bouncycastle.crypto.signers.SM2Signer signer
-
-
Constructor Details
-
SM2
public SM2()构造,生成新的私钥公钥对 -
SM2
构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密- Parameters:
privateKey- 私钥Hex或Base64表示,必须使用PKCS#8规范publicKey- 公钥Hex或Base64表示,必须使用X509规范
-
SM2
public SM2(byte[] privateKey, byte[] publicKey) 构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密- Parameters:
privateKey- 私钥,可以使用PKCS#8、D值或PKCS#1规范publicKey- 公钥,可以使用X509、Q值或PKCS#1规范
-
SM2
构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密- Parameters:
privateKey- 私钥publicKey- 公钥
-
SM2
构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密- Parameters:
privateKey- 私钥16进制publicKeyPointX- 公钥X16进制publicKeyPointY- 公钥Y16进制
-
SM2
public SM2(byte[] privateKey, byte[] publicKeyPointX, byte[] publicKeyPointY) 构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密- Parameters:
privateKey- 私钥publicKeyPointX- 公钥XpublicKeyPointY- 公钥Y
-
SM2
public SM2(org.bouncycastle.crypto.params.ECPrivateKeyParameters privateKeyParams, org.bouncycastle.crypto.params.ECPublicKeyParameters publicKeyParams) 构造 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密- Parameters:
privateKeyParams- 私钥,可以为nullpublicKeyParams- 公钥,可以为null
-
-
Method Details
-
init
初始化 私钥和公钥同时为空时生成一对新的私钥和公钥 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密(签名)或者解密(校验)- Returns:
- this
-
initKeys
Description copied from class:Asymmetric生成公钥和私钥- Overrides:
initKeysin classAsymmetric<SM2>- Returns:
- this
-
encrypt
public byte[] encrypt(byte[] data) throws org.aoju.bus.core.exception.CryptoException 使用公钥加密,SM2非对称加密的结果由C1,C3,C2三部分组成,其中:C1 生成随机数的计算出的椭圆曲线点 C3 SM3的摘要值 C2 密文数据
- Parameters:
data- 被加密的bytes- Returns:
- 加密后的bytes
- Throws:
org.aoju.bus.core.exception.CryptoException- 包括InvalidKeyException和InvalidCipherTextException的包装异常
-
encrypt
public byte[] encrypt(byte[] data, KeyType keyType) throws org.aoju.bus.core.exception.CryptoException 加密,SM2非对称加密的结果由C1,C3,C2三部分组成,其中:C1 生成随机数的计算出的椭圆曲线点 C3 SM3的摘要值 C2 密文数据
- Parameters:
data- 被加密的byteskeyType- 私钥或公钥KeyType- Returns:
- 加密后的bytes
- Throws:
org.aoju.bus.core.exception.CryptoException- 包括InvalidKeyException和InvalidCipherTextException的包装异常
-
encrypt
public byte[] encrypt(byte[] data, org.bouncycastle.crypto.CipherParameters pubKeyParameters) throws org.aoju.bus.core.exception.CryptoException 加密,SM2非对称加密的结果由C1,C2,C3三部分组成,其中:C1 生成随机数的计算出的椭圆曲线点 C2 密文数据 C3 SM3的摘要值
- Parameters:
data- 被加密的bytespubKeyParameters- 公钥参数- Returns:
- 加密后的bytes
- Throws:
org.aoju.bus.core.exception.CryptoException- 包括InvalidKeyException和InvalidCipherTextException的包装异常
-
decrypt
public byte[] decrypt(byte[] data) throws org.aoju.bus.core.exception.CryptoException 使用私钥解密- Parameters:
data- SM2密文,实际包含三部分:ECC公钥、真正的密文、公钥和原文的SM3-HASH值- Returns:
- 加密后的bytes
- Throws:
org.aoju.bus.core.exception.CryptoException- 包括InvalidKeyException和InvalidCipherTextException的包装异常
-
decrypt
public byte[] decrypt(byte[] data, KeyType keyType) throws org.aoju.bus.core.exception.CryptoException 解密- Parameters:
data- SM2密文,实际包含三部分:ECC公钥、真正的密文、公钥和原文的SM3-HASH值keyType- 私钥或公钥KeyType- Returns:
- 加密后的bytes
- Throws:
org.aoju.bus.core.exception.CryptoException- 包括InvalidKeyException和InvalidCipherTextException的包装异常
-
decrypt
public byte[] decrypt(byte[] data, org.bouncycastle.crypto.CipherParameters privateKeyParameters) throws org.aoju.bus.core.exception.CryptoException 解密- Parameters:
data- SM2密文,实际包含三部分:ECC公钥、真正的密文、公钥和原文的SM3-HASH值privateKeyParameters- 私钥参数- Returns:
- 加密后的bytes
- Throws:
org.aoju.bus.core.exception.CryptoException- 包括InvalidKeyException和InvalidCipherTextException的包装异常
-
signHex
用私钥对信息生成数字签名- Parameters:
dataHex- 被签名的数据数据- Returns:
- 签名
-
sign
public byte[] sign(byte[] data) 用私钥对信息生成数字签名,签名格式为ASN1 * 在硬件签名中,返回结果为R+S,可以通过调用Builder.rsAsn1ToPlain(byte[])方法转换之。- Parameters:
data- 加密数据- Returns:
- 签名
-
signHex
用私钥对信息生成数字签名- Parameters:
dataHex- 被签名的数据数据idHex- 可以为null,若为null,则默认withId为字节数组:"1234567812345678".getBytes()- Returns:
- 签名
-
sign
public byte[] sign(byte[] data, byte[] id) 用私钥对信息生成数字签名,签名格式为ASN1 在硬件签名中,返回结果为R+S,可以通过调用Builder.rsAsn1ToPlain(byte[])方法转换之。- Parameters:
data- 被签名的数据数据id- 可以为null,若为null,则默认withId为字节数组:"1234567812345678".getBytes()- Returns:
- 签名
-
verifyHex
用公钥检验数字签名的合法性- Parameters:
dataHex- 数据签名后的数据signHex- 签名- Returns:
- 是否验证通过
-
verify
public boolean verify(byte[] data, byte[] sign) 用公钥检验数字签名的合法性- Parameters:
data- 签名后的数据sign- 签名- Returns:
- 是否验证通过
-
verifyHex
用公钥检验数字签名的合法性- Parameters:
dataHex- 数据签名后的数据的Hex值signHex- 签名的Hex值idHex- ID的Hex值- Returns:
- 是否验证通过
-
verify
public boolean verify(byte[] data, byte[] sign, byte[] id) 用公钥检验数字签名的合法性- Parameters:
data- 数据签名后的数据sign- 签名id- 可以为null,若为null,则默认withId为字节数组:"1234567812345678".getBytes()- Returns:
- 是否验证通过
-
setPrivateKey
Description copied from class:Asymmetric设置私钥- Overrides:
setPrivateKeyin classAsymmetric<SM2>- Parameters:
privateKey- 私钥- Returns:
- this
-
setPrivateKeyParams
public SM2 setPrivateKeyParams(org.bouncycastle.crypto.params.ECPrivateKeyParameters privateKeyParams) 设置私钥参数- Parameters:
privateKeyParams- 私钥参数- Returns:
- this
-
setPublicKey
Description copied from class:Asymmetric设置公钥- Overrides:
setPublicKeyin classAsymmetric<SM2>- Parameters:
publicKey- 公钥- Returns:
- this
-
setPublicKeyParams
设置公钥参数- Parameters:
publicKeyParams- 公钥参数- Returns:
- this
-
usePlainEncoding
设置DSA signatures的编码为PlainDSAEncoding- Returns:
- this
-
setEncoding
设置DSA signatures的编码- Parameters:
encoding-DSAEncoding实现- Returns:
- this
-
setDigest
设置Hash算法- Parameters:
digest-Digest实现- Returns:
- this
-
setMode
设置SM2模式,旧版是C1C2C3,新版本是C1C3C2- Parameters:
mode-SM2Engine.Mode- Returns:
- this
-
getD
public byte[] getD()获得私钥D值(编码后的私钥)- Returns:
- D值
-
getDHex
获得私钥D值(编码后的私钥)- Returns:
- D值
-
getDBigInteger
获得私钥D值- Returns:
- D值
-
getQ
public byte[] getQ(boolean isCompressed) 获得公钥Q值(编码后的公钥)- Parameters:
isCompressed- 是否压缩- Returns:
- Q值
-