<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      import com.alibaba.fastjson.JSON;
      import com.zs.common.core.domain.entity.SysUser;
      import org.bouncycastle.asn1.gm.GMNamedCurves;
      import org.bouncycastle.asn1.x9.X9ECParameters;
      import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
      import org.bouncycastle.crypto.engines.SM2Engine;
      import org.bouncycastle.crypto.generators.ECKeyPairGenerator;
      import org.bouncycastle.crypto.params.*;
      import org.bouncycastle.math.ec.ECPoint;
      import org.bouncycastle.util.encoders.Hex;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      
      import java.math.BigInteger;
      import java.security.NoSuchAlgorithmException;
      import java.security.SecureRandom;
      
      public class SM2Utils {
      
          private static final Logger log = LoggerFactory.getLogger(SM2Utils.class);
          public static String staticPublicKey = "0408fda0c0f6d1e51289cd5edcef7386a696e1a63659dd4ae3516cfd4d0a5dfaa341ff9c86f2572cae9e1406a036d43b71862e8acf0dbfaeb6216c775038b46d40";
          public static String staticPrivateKey = "2158c2678f7ee7685392ddc31916b8c835a98887040bbf69f76fa4aa0acff42e";
      
          /**
           * 生成SM2公私鑰對
           *
           * @return
           */
          private static void getSM2Key() {
              //獲取一條SM2曲線參數
              X9ECParameters sm2ECParameters = GMNamedCurves.getByName("sm2p256v1");
      
              //構造domain參數
              ECDomainParameters domainParameters = new ECDomainParameters(sm2ECParameters.getCurve(),
                      sm2ECParameters.getG(), sm2ECParameters.getN());
      
              //1.創建密鑰生成器
              ECKeyPairGenerator keyPairGenerator = new ECKeyPairGenerator();
      
              //2.初始化生成器,帶上隨機數
              try {
                  keyPairGenerator.init(new ECKeyGenerationParameters(domainParameters, SecureRandom.getInstance("SHA1PRNG")));
              } catch (NoSuchAlgorithmException e) {
                  log.error("生成公私鑰對時出現異常:", e);
      //            e.printStackTrace();
              }
      
              //3.生成密鑰對
              AsymmetricCipherKeyPair asymmetricCipherKeyPair = keyPairGenerator.generateKeyPair();
              ECPoint ecPoint = ((ECPublicKeyParameters) asymmetricCipherKeyPair.getPublic()).getQ();
              String publicKey = Hex.toHexString(ecPoint.getEncoded(false));
              System.out.println("公鑰:" + publicKey);
              BigInteger privatekey = ((ECPrivateKeyParameters) asymmetricCipherKeyPair.getPrivate()).getD();
              String priKey = privatekey.toString(16);
              System.out.println("私鑰:" + priKey);
          }
      
          /**
           * SM2加密算法
           *
           * @param publicKey 公鑰
           * @param data      數據
           * @return
           */
          public static String encrypt(String publicKey, String data) {
              // 獲取一條SM2曲線參數
              X9ECParameters sm2ECParameters = GMNamedCurves.getByName("sm2p256v1");
              // 構造domain參數
              ECDomainParameters domainParameters = new ECDomainParameters(sm2ECParameters.getCurve(),
                      sm2ECParameters.getG(),
                      sm2ECParameters.getN());
              //提取公鑰點
              ECPoint pukPoint = sm2ECParameters.getCurve().decodePoint(Hex.decode(publicKey));
              // 公鑰前面的02或者03表示是壓縮公鑰,04表示未壓縮公鑰, 04的時候,可以去掉前面的04
              ECPublicKeyParameters publicKeyParameters = new ECPublicKeyParameters(pukPoint, domainParameters);
      
              SM2Engine sm2Engine = new SM2Engine();
              sm2Engine.init(true, new ParametersWithRandom(publicKeyParameters, new SecureRandom()));
      
              byte[] arrayOfBytes = null;
              try {
                  byte[] in = data.getBytes("utf-8");
                  arrayOfBytes = sm2Engine.processBlock(in, 0, in.length);
              } catch (Exception e) {
                  log.error("SM2加密時出現異常:", e);
              }
              return Hex.toHexString(arrayOfBytes);
          }
      
          /**
           * SM2解密算法
           *
           * @param privateKey 私鑰
           * @param cipherData 密文數據
           * @return
           */
          public static String decrypt(String privateKey, String cipherData) {
              byte[] cipherDataByte = Hex.decode(cipherData);
      
              //獲取一條SM2曲線參數
              X9ECParameters sm2ECParameters = GMNamedCurves.getByName("sm2p256v1");
              //構造domain參數
              ECDomainParameters domainParameters = new ECDomainParameters(sm2ECParameters.getCurve(),
                      sm2ECParameters.getG(), sm2ECParameters.getN());
      
              BigInteger privateKeyD = new BigInteger(privateKey, 16);
              ECPrivateKeyParameters privateKeyParameters = new ECPrivateKeyParameters(privateKeyD, domainParameters);
      
              SM2Engine sm2Engine = new SM2Engine();
              sm2Engine.init(false, privateKeyParameters);
      
              String result = null;
              try {
                  byte[] arrayOfBytes = sm2Engine.processBlock(cipherDataByte, 0, cipherDataByte.length);
                  return new String(arrayOfBytes, "utf-8");
              } catch (Exception e) {
                  log.error("SM2解密時出現異常:", e);
              }
              return result;
      
          }
      
          /**
           * 加密:返回加密串
           * @param message
           * @return
           */
          public static String encryptionMessage(String message){
              //加密
              String resultPublic = encrypt(staticPublicKey, message);
              return resultPublic;
          }
      
          /**
           * 解析加密串返回解析內容
           * @param encrypted
           * @return
           */
          public static String analysisMessage(String encrypted){
              //解密
              String resultPrivate = decrypt(staticPrivateKey, encrypted);
              return resultPrivate;
          }
      
      
          public static void main(String[] args) {
              //生成公私鑰匙對
      //        getSM2Key();
              SysUser su = new SysUser();
              su.setUserName("ll123456789");
              su.setPassword("ll123456789");
              su.setCreateTime(DateUtils.getNowDate());
              String message = JSON.toJSONString(su);
              //加密
              String resultPublic = encryptionMessage(message);
              System.out.println("加密結果:" + resultPublic);
              //解密
              String resultPrivate = analysisMessage(resultPublic);
              System.out.println("解密結果:" + resultPrivate);
          }
      
      }

       

              <!--國密-->
              <dependency>
                  <groupId>org.bouncycastle</groupId>
                  <artifactId>bcpkix-jdk15on</artifactId>
                  <version>1.65</version>
              </dependency>

       

      posted on 2023-06-27 14:31  茫無所知  閱讀(295)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久久久中文伊人久久久| 蜜臀av一区二区三区日韩| 国产欧美精品一区二区三区-老狼 真实单亲乱l仑对白视频 | 美女内射毛片在线看3d| 中文字幕亚洲人妻系列| 国产精品推荐手机在线| 国产精品高清中文字幕| 一色桃子中出欲求不满人妻| 无码人妻斩一区二区三区| 俄罗斯老熟妇性爽xxxx| 精品少妇av蜜臀av| 甘洛县| 久久久久久人妻一区精品| 中文字幕亚洲人妻系列| 国产精品有码在线观看| 亚洲a片无码一区二区蜜桃| 在线 欧美 中文 亚洲 精品| 亚洲一区二区三区在线观看精品中文| 欧美黑人巨大videos精品| 青青草一区二区免费精品| 久久人妻精品国产| 亚洲顶级裸体av片| 亚洲AV无码国产成人久久强迫 | 无码精品人妻一区二区三区中| 亚洲人妻精品一区二区| 人妻系列无码专区免费| 亚洲男人天堂一级黄色片| 国产三级精品片| 亚洲国产综合精品2020| 精品尤物国产尤物在线看| 亚洲精品日本久久一区二区三区| 日韩中文字幕高清有码| 清纯唯美人妻少妇第一页| 69精品丰满人妻无码视频a片| 东京热大乱系列无码| 久久精品国产热久久精品国产亚洲| 日韩av无码一区二区三区| 少妇伦子伦精品无吗| 粉嫩av一区二区三区蜜臀 | 国产成人久久蜜一区二区| 国产亚洲精品AA片在线播放天|