!--hutool的SM2加密--/groupIdartifactIdbcprov-jdk15to18//version//groupIdartifactIdhutool-all//version/depency二、工具类
首先创建一个用于存储加密解密内容的实体:
;;;;@Data@EqualsAndHashCode(callSuper=false)publicclassApiEncryptInfoDTOimplementsSerializable{privatestaticfinallongserialVersionUID=255205006827117733L;/***加密类型(2:sm2加密,4:sm4加密)*/privateStringtype;/***非对称加密私钥*/privateStringprivateKey;/***非对称加密公钥*/privateStringpublicKey;/***对称加密密钥*/privateStringkey;/***原始数据*/privateStringdata;/***加密后数据*/privateStringdataHex;/***非对称加密签名*/privateStringsign;}接着是具体的加密解密过程工具类:
;;;;;;;;;;;;;;;;@Slf4jpublicclassSM2Utils{/***SM2加密**@paramdto包含加解密相关参数信息的实体*@return处理结果*/publicstaticApiEncryptInfoDTOencrypt2Data(ApiEncryptInfoDTOdto){StringpublicKey=();//若为空,使用默认if((publicKey)){publicKey="04db9629dd33ba568e9507add5df6587a0998361a03d3321948b448c653c2c1b7056434884ab6f3d1c529501f166a336e86f045cea10dffe58aa82ea13d7253763";}Stringdata=();//创建sm2对象SM2sm2=getSM2(null,publicKey);StringdataHex=(data,);(dataHex);returndto;}/***SM2解密*@paramdto包含加解密相关参数信息的实体*@return处理结果*/publicstaticApiEncryptInfoDTOdecrypt2Data(ApiEncryptInfoDTOdto){StringprivateKey=();//若为空,使用默认if((privateKey)){privateKey="1ebf8b341c695ee456fd1a41b82645724bc25d79935437d30e7e4b0a554baa5e";}StringdataHex=();try{//创建sm2对象SM2sm2=getSM2(privateKey,null);Stringdata=((dataHex,));(data);}catch(Exceptione){("SM2解密失败",e);}returndto;}/***SM4加密**@paramdto包含加解密相关参数信息的实体*@return处理结果*/publicstaticApiEncryptInfoDTOencrypt4Data(ApiEncryptInfoDTOdto){//指定的密钥Stringkey=();//若为空,使用默认if((key)){key="zps9yv341b3s90c2";}Stringdata=();try{SymmetricCryptosm4=((_UTF_8));StringdataHex=(data);(dataHex);}catch(Exceptione){("加密数据异常,异常数据:"+data,e);}returndto;}/***SM4解密**@paramdto包含加解密相关参数信息的实体*@return处理结果*/publicstaticApiEncryptInfoDTOdecrypt4Data(ApiEncryptInfoDTOdto){//指定的密钥Stringkey=();//若为空,使用默认if((key)){key="zps9yv341b3s90c2";}StringdataHex=();try{SymmetricCryptosm4=((_UTF_8));Stringdata=(dataHex);(data);}catch(Exceptione){("解密数据异常,异常数据:"+dataHex,e);}returndto;}/***获取SM2加密工具对象**@paramprivateKey加密私钥*@parampublicKey加密公钥*@return处理结果*/privatestaticSM2getSM2(StringprivateKey,StringpublicKey){ECPrivateKeyParametersecPrivateKeyParameters=null;ECPublicKeyParametersecPublicKeyParameters=null;if((privateKey)){ecPrivateKeyParameters=(privateKey);}if((publicKey)){if(()==130){//这里需要去掉开始第一个字节第一个字节表示标记publicKey=(2);}Stringxhex=(0,64);Stringyhex=(64,128);ecPublicKeyParameters=(xhex,yhex);}//创建sm2对象SM2sm2=newSM2(ecPrivateKeyParameters,ecPublicKeyParameters);();();returnsm2;}/***生成一对C1C2C3格式的SM2密钥**@return处理结果*/publicstaticApiEncryptInfoDTOgetSM2Key(){ApiEncryptInfoDTOdto=newApiEncryptInfoDTO();//创建sm2对象SM2sm2=();byte[]privateKeyByte=(());//这里公钥不压缩公钥的第一个字节用于表示是否压缩可以不要byte[]publicKeyByte=((BCECPublicKey)()).getQ().getEncoded(false);try{StringprivateKey=(privateKeyByte);StringpublicKey=(publicKeyByte);(publicKey);(privateKey);}catch(Exceptione){("获取SM2密钥出错",e);}returndto;}/***获取一个随机的SM4密钥**@return处理结果*/publicstaticApiEncryptInfoDTOgetSM4Key(){Stringsm4Key=(_CHAR_NUMBER,16);ApiEncryptInfoDTOdto=newApiEncryptInfoDTO();(sm4Key);returndto;}}最后是测试工具类
;;publicclasstest{/***测试SM2加密*/@Testpublicvoidtest01(){ApiEncryptInfoDTOdto=newApiEncryptInfoDTO();("123456");dto=(dto);(());}/***测试SM2解密*/@Testpublicvoidtest02(){ApiEncryptInfoDTOdto=newApiEncryptInfoDTO();("046A331A8227AD1CCC7E33ECEAEF7CF1CD7D3F3EEE2218E4A0AD1BE08ED5E65F0DB6811656FAE4CD1A16D8E79DE66FCF80A08158CD7E34523E76975789B18AE2C9FF9012BD47E0F84BC778538D6A6C17304A83F2F57014EC0C257987D8DA93403D53F193234DB8");dto=(dto);(());}/***生成一对C1C2C3格式的SM2密钥*/@Testpublicvoidtest03(){ApiEncryptInfoDTOdto=();(());(());}/***获取一个随机的SM4密钥*/@Testpublicvoidtest04(){ApiEncryptInfoDTOdto=();(());}/***测试SM4加密*/@Testpublicvoidtest05(){ApiEncryptInfoDTOdto=newApiEncryptInfoDTO();("123456");dto=(dto);(());}/***测试SM4解密*/@Testpublicvoidtest06(){ApiEncryptInfoDTOdto=newApiEncryptInfoDTO();("0c878839ddba1631931ca9e7f9c981eb");dto=(dto);(());}}
版权声明:文章来源网络聚合,如有问题请联系删除。





