| | |
| | | package org.dromara.common.encrypt.core.encryptor; |
| | | |
| | | import cn.hutool.core.codec.Base64; |
| | | import cn.hutool.crypto.SmUtil; |
| | | import cn.hutool.crypto.asymmetric.KeyType; |
| | | import cn.hutool.crypto.asymmetric.SM2; |
| | | import org.dromara.common.core.utils.StringUtils; |
| | | import org.dromara.common.encrypt.core.EncryptContext; |
| | | import org.dromara.common.encrypt.enumd.AlgorithmType; |
| | | import org.dromara.common.encrypt.enumd.EncodeType; |
| | | import org.dromara.common.encrypt.utils.EncryptUtils; |
| | | |
| | | /** |
| | | * sm2算法实现 |
| | |
| | | */ |
| | | public class Sm2Encryptor extends AbstractEncryptor { |
| | | |
| | | private final SM2 sm2; |
| | | private final EncryptContext context; |
| | | |
| | | public Sm2Encryptor(EncryptContext context) { |
| | | super(context); |
| | |
| | | if (StringUtils.isAnyEmpty(privateKey, publicKey)) { |
| | | throw new IllegalArgumentException("SM2公私钥均需要提供,公钥加密,私钥解密。"); |
| | | } |
| | | this.sm2 = SmUtil.sm2(Base64.decode(privateKey), Base64.decode(publicKey)); |
| | | this.context = context; |
| | | } |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public String encrypt(String value, EncodeType encodeType) { |
| | | if (encodeType == EncodeType.HEX) { |
| | | return sm2.encryptHex(value, KeyType.PublicKey); |
| | | return EncryptUtils.encryptBySm2Hex(value, context.getPublicKey()); |
| | | } else { |
| | | return sm2.encryptBase64(value, KeyType.PublicKey); |
| | | return EncryptUtils.encryptBySm2(value, context.getPublicKey()); |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public String decrypt(String value) { |
| | | return this.sm2.decryptStr(value, KeyType.PrivateKey); |
| | | return EncryptUtils.decryptBySm2(value, context.getPrivateKey()); |
| | | } |
| | | } |