Class Sm2Cipher
java.lang.Object
cloud.opencode.base.crypto.asymmetric.Sm2Cipher
- All Implemented Interfaces:
AsymmetricCipher
SM2 cipher implementation - Chinese national cryptographic standard
SM2 密码实现 - 中国国密标准
SM2 is an elliptic curve cryptography algorithm specified in the Chinese National Standard GM/T 0003-2012. This implementation requires Bouncy Castle cryptographic provider to be available on the classpath. SM2 是中国国家标准 GM/T 0003-2012 中规定的椭圆曲线密码算法。 此实现需要 Bouncy Castle 加密提供程序在类路径中可用。
Note: This class requires the optional Bouncy Castle dependency. If Bouncy Castle is not available, instantiation will fail with an exception. 注意:此类需要可选的 Bouncy Castle 依赖。 如果 Bouncy Castle 不可用,实例化将失败并抛出异常。
Features | 主要功能:
- SM2 encryption (Chinese national standard) - SM2 加密(中国国密标准)
- Requires Bouncy Castle provider - 需要 Bouncy Castle 提供者
Usage Examples | 使用示例:
Sm2Cipher sm2 = Sm2Cipher.create();
sm2.setPublicKey(publicKey);
byte[] encrypted = sm2.encrypt(data);
Security | 安全性:
- Thread-safe: No - 线程安全: 否
- Null-safe: Yes - 空值安全: 是
Performance | 性能特性:
- Time complexity: O(k^3) for key operations - 时间复杂度: O(k^3),k为密钥参数
- Space complexity: O(k) - 空间复杂度: O(k)
- Since:
- JDK 25, opencode-base-crypto V1.0.0
- Author:
- Leon Soo www.LeonSoo.com
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionstatic Sm2Ciphercreate()Create a new SM2 cipher instance 创建新的 SM2 密码实例byte[]decrypt(byte[] ciphertext) Decrypt data using private key 使用私钥解密数据byte[]decryptBase64(String base64Ciphertext) Decrypt Base64 encoded ciphertext 解密 Base64 编码的密文byte[]decryptHex(String hexCiphertext) Decrypt hexadecimal encoded ciphertext 解密十六进制编码的密文decryptToString(byte[] ciphertext) Decrypt data and return as string 解密数据并返回字符串byte[]encrypt(byte[] plaintext) Encrypt data using public key 使用公钥加密数据byte[]Encrypt string using public key 使用公钥加密字符串encryptBase64(byte[] plaintext) Encrypt data and return Base64 encoded result 加密数据并返回 Base64 编码结果encryptHex(byte[] plaintext) Encrypt data and return hexadecimal encoded result 加密数据并返回十六进制编码结果Generate a new key pair for this cipher 为此加密器生成新的密钥对Get the algorithm name 获取算法名称intGet maximum size of data that can be encrypted in a single operation 获取单次操作可加密的最大数据大小Get the private key 获取私钥Get the public key 获取公钥static booleanCheck if SM2 is available (i.e., Bouncy Castle is present) 检查 SM2 是否可用(即 Bouncy Castle 是否存在)setKeyPair(KeyPair keyPair) Set both public and private keys from key pair 从密钥对设置公钥和私钥setPrivateKey(byte[] encodedKey) Set private key from encoded byte array 从编码的字节数组设置私钥setPrivateKey(PrivateKey privateKey) Set private key for decryption operations 设置用于解密操作的私钥setPrivateKeyPem(String pem) Set private key from PEM formatted string 从 PEM 格式字符串设置私钥setPublicKey(byte[] encodedKey) Set public key from encoded byte array 从编码的字节数组设置公钥setPublicKey(PublicKey publicKey) Set public key for encryption operations 设置用于加密操作的公钥setPublicKeyPem(String pem) Set public key from PEM formatted string 从 PEM 格式字符串设置公钥static Sm2CipherCreate SM2 cipher with generated key pair 创建带生成密钥对的 SM2 密码
-
Method Details
-
create
Create a new SM2 cipher instance 创建新的 SM2 密码实例- Returns:
- new SM2 cipher instance
- Throws:
OpenCryptoException- if Bouncy Castle is not available
-
withGeneratedKeyPair
Create SM2 cipher with generated key pair 创建带生成密钥对的 SM2 密码- Returns:
- SM2 cipher with generated keys
- Throws:
OpenCryptoException- if Bouncy Castle is not available or key generation fails
-
setPublicKey
Description copied from interface:AsymmetricCipherSet public key for encryption operations 设置用于加密操作的公钥- Specified by:
setPublicKeyin interfaceAsymmetricCipher- Parameters:
publicKey- the public key- Returns:
- this cipher instance for method chaining
-
setPublicKey
Description copied from interface:AsymmetricCipherSet public key from encoded byte array 从编码的字节数组设置公钥- Specified by:
setPublicKeyin interfaceAsymmetricCipher- Parameters:
encodedKey- the encoded public key bytes- Returns:
- this cipher instance for method chaining
-
setPublicKeyPem
Description copied from interface:AsymmetricCipherSet public key from PEM formatted string 从 PEM 格式字符串设置公钥- Specified by:
setPublicKeyPemin interfaceAsymmetricCipher- Parameters:
pem- the PEM formatted public key- Returns:
- this cipher instance for method chaining
-
setPrivateKey
Description copied from interface:AsymmetricCipherSet private key for decryption operations 设置用于解密操作的私钥- Specified by:
setPrivateKeyin interfaceAsymmetricCipher- Parameters:
privateKey- the private key- Returns:
- this cipher instance for method chaining
-
setPrivateKey
Description copied from interface:AsymmetricCipherSet private key from encoded byte array 从编码的字节数组设置私钥- Specified by:
setPrivateKeyin interfaceAsymmetricCipher- Parameters:
encodedKey- the encoded private key bytes- Returns:
- this cipher instance for method chaining
-
setPrivateKeyPem
Description copied from interface:AsymmetricCipherSet private key from PEM formatted string 从 PEM 格式字符串设置私钥- Specified by:
setPrivateKeyPemin interfaceAsymmetricCipher- Parameters:
pem- the PEM formatted private key- Returns:
- this cipher instance for method chaining
-
setKeyPair
Description copied from interface:AsymmetricCipherSet both public and private keys from key pair 从密钥对设置公钥和私钥- Specified by:
setKeyPairin interfaceAsymmetricCipher- Parameters:
keyPair- the key pair containing public and private keys- Returns:
- this cipher instance for method chaining
-
encrypt
public byte[] encrypt(byte[] plaintext) Description copied from interface:AsymmetricCipherEncrypt data using public key 使用公钥加密数据- Specified by:
encryptin interfaceAsymmetricCipher- Parameters:
plaintext- the data to encrypt- Returns:
- encrypted bytes
-
encrypt
Description copied from interface:AsymmetricCipherEncrypt string using public key 使用公钥加密字符串- Specified by:
encryptin interfaceAsymmetricCipher- Parameters:
plaintext- the string to encrypt- Returns:
- encrypted bytes
-
encryptBase64
Description copied from interface:AsymmetricCipherEncrypt data and return Base64 encoded result 加密数据并返回 Base64 编码结果- Specified by:
encryptBase64in interfaceAsymmetricCipher- Parameters:
plaintext- the data to encrypt- Returns:
- Base64 encoded ciphertext
-
encryptHex
Description copied from interface:AsymmetricCipherEncrypt data and return hexadecimal encoded result 加密数据并返回十六进制编码结果- Specified by:
encryptHexin interfaceAsymmetricCipher- Parameters:
plaintext- the data to encrypt- Returns:
- hexadecimal encoded ciphertext
-
decrypt
public byte[] decrypt(byte[] ciphertext) Description copied from interface:AsymmetricCipherDecrypt data using private key 使用私钥解密数据- Specified by:
decryptin interfaceAsymmetricCipher- Parameters:
ciphertext- the encrypted data- Returns:
- decrypted bytes
-
decryptToString
Description copied from interface:AsymmetricCipherDecrypt data and return as string 解密数据并返回字符串- Specified by:
decryptToStringin interfaceAsymmetricCipher- Parameters:
ciphertext- the encrypted data- Returns:
- decrypted string
-
decryptBase64
Description copied from interface:AsymmetricCipherDecrypt Base64 encoded ciphertext 解密 Base64 编码的密文- Specified by:
decryptBase64in interfaceAsymmetricCipher- Parameters:
base64Ciphertext- the Base64 encoded ciphertext- Returns:
- decrypted bytes
-
decryptHex
Description copied from interface:AsymmetricCipherDecrypt hexadecimal encoded ciphertext 解密十六进制编码的密文- Specified by:
decryptHexin interfaceAsymmetricCipher- Parameters:
hexCiphertext- the hexadecimal encoded ciphertext- Returns:
- decrypted bytes
-
getAlgorithm
Description copied from interface:AsymmetricCipherGet the algorithm name 获取算法名称- Specified by:
getAlgorithmin interfaceAsymmetricCipher- Returns:
- the algorithm name
-
getMaxEncryptSize
public int getMaxEncryptSize()Description copied from interface:AsymmetricCipherGet maximum size of data that can be encrypted in a single operation 获取单次操作可加密的最大数据大小- Specified by:
getMaxEncryptSizein interfaceAsymmetricCipher- Returns:
- maximum encrypt size in bytes, or -1 if not applicable
-
generateKeyPair
Description copied from interface:AsymmetricCipherGenerate a new key pair for this cipher 为此加密器生成新的密钥对- Specified by:
generateKeyPairin interfaceAsymmetricCipher- Returns:
- generated key pair
-
getPublicKey
-
getPrivateKey
Get the private key 获取私钥- Returns:
- the private key, or null if not set
-
isAvailable
public static boolean isAvailable()Check if SM2 is available (i.e., Bouncy Castle is present) 检查 SM2 是否可用(即 Bouncy Castle 是否存在)- Returns:
- true if SM2 is available, false otherwise
-