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

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

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      1. 在openEuler(推薦)或Ubuntu或Windows(不推薦)中完成下面任務
      2. 參考附件內容完成SM2加解密的內容,提交運行結果截圖(10‘)
        2 完成SM3,SM4算法的調用,提交運行結果截圖和代碼(15’, 選做)

      BouncyCastle配置

      1.jar包下載

      官網:https://www.bouncycastle.org/latest_releases.html
      bcprov-ext-jdk15to18-1.73.jar
      bcprov-jdk15to18-1.73.jar

      2.將下載的兩個jar包拷貝到 %JAVA_HOME%\jre\lib\ext 目錄下面

      3.修改配置文件 %JAVA_HOME%\jre\lib\security\java.security ,在末尾添加 security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider

      4.在項目中導入jar包: bcprov‐ext‐jdk15to18‐168.jar

      代碼

      demo.java

      import org.bouncycastle.jce.provider.BouncyCastleProvider;
      import java.security.*;
      import java.security.spec.ECGenParameterSpec;
      import java.util.Arrays;
      
      public class demo {
      	private static String M = "ycy20201212";
      
      	public static void main(String[] args) throws Exception {
      		SM2Util sm2 = new SM2Util();
      		final ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");
      		// 獲取一個橢圓曲線類型的密鑰對生成器
      		final KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", new BouncyCastleProvider());
      		// 使用SM2參數初始化生成器
      		kpg.initialize(sm2Spec);
      		// 獲取密鑰對
      		KeyPair keyPair = kpg.generateKeyPair();
      		PublicKey publicKey = keyPair.getPublic();
      		PrivateKey privateKey = keyPair.getPrivate();
      		System.out.println("數據:" + M);
      		String data = sm2.encrypt(publicKey, M);
      		System.out.println("公鑰加密:" + data);
      		String text = sm2.decrypt(privateKey, data);
      		System.out.println("私鑰解密:" + text);
      
      		SM3Util sm3 = new SM3Util();
      		byte[] digest = sm3.digest(M);
      		System.out.println("SM3摘要:" + Arrays.toString(digest));
      
      		SM4Util sm4 = new SM4Util();
      		byte[] key1 = SM4Key.generateKey();
      		byte[] iv = null;
      		byte[] sm4data = sm4.encrypt(digest, key1, SM4ModeAndPaddingEnum.SM4_ECB_NoPadding, iv);
      		System.out.println("SM4加密:" + Arrays.toString(sm4data));
      		byte[] sm4text = sm4.decrypt(sm4data, key1, SM4ModeAndPaddingEnum.SM4_ECB_NoPadding, iv);
      		System.out.println("SM4解密:" + Arrays.toString(sm4text));
      	}
      }
      

      SM2Util.java

      import org.bouncycastle.crypto.engines.SM2Engine;
      import org.bouncycastle.crypto.params.*;
      import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
      import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
      import org.bouncycastle.jce.spec.ECParameterSpec;
      import org.bouncycastle.util.encoders.Hex;
      
      import java.nio.charset.StandardCharsets;
      import java.security.PrivateKey;
      import java.security.PublicKey;
      import java.security.SecureRandom;
      
      public class SM2Util {
      	/**
      	 * SM2加密算法
      	 * 
      	 * @param publicKey 公鑰
      	 * @param data      明文數據
      	 * @return
      	 **/
      	public String encrypt(PublicKey publicKey, String data) {
      		ECPublicKeyParameters ecPublicKeyParameters = null;
      		if (publicKey instanceof BCECPublicKey) {
      			BCECPublicKey bcecPublicKey = (BCECPublicKey) publicKey;
      			ECParameterSpec ecParameterSpec = bcecPublicKey.getParameters();
      			ECDomainParameters ecDomainParameters = new ECDomainParameters(ecParameterSpec.getCurve(),
      					ecParameterSpec.getG(), ecParameterSpec.getN());
      			ecPublicKeyParameters = new ECPublicKeyParameters(bcecPublicKey.getQ(), ecDomainParameters);
      		}
      		SM2Engine sm2Engine = new SM2Engine();
      		sm2Engine.init(true, new ParametersWithRandom(ecPublicKeyParameters, new SecureRandom()));
      
      		byte[] arrayOfBytes = null;
      		try {
      			byte[] in = data.getBytes(StandardCharsets.UTF_8);
      			arrayOfBytes = sm2Engine.processBlock(in, 0, in.length);
      		} catch (Exception e) {
      			System.out.println("SM2加密時出現異常:");
      		}
      		return Hex.toHexString(arrayOfBytes);
      	}
      
      	/**
      	 * SM2解密算法
      	 * 
      	 * @param privateKey 私鑰
      	 * @param cipherData 密文數據
      	 * @return
      	 **/
      	public String decrypt(PrivateKey privateKey, String cipherData) {
      		byte[] cipherDataByte = Hex.decode(cipherData);
      		BCECPrivateKey bcecPrivateKey = (BCECPrivateKey) privateKey;
      		ECParameterSpec ecParameterSpec = bcecPrivateKey.getParameters();
      		ECDomainParameters ecDomainParameters = new ECDomainParameters(ecParameterSpec.getCurve(),
      				ecParameterSpec.getG(), ecParameterSpec.getN());
      		ECPrivateKeyParameters ecPrivateKeyParameters = new ECPrivateKeyParameters(bcecPrivateKey.getD(),
      				ecDomainParameters);
      		SM2Engine sm2Engine = new SM2Engine();
      		sm2Engine.init(false, ecPrivateKeyParameters);
      		String result = null;
      		try {
      			byte[] arrayOfBytes = sm2Engine.processBlock(cipherDataByte, 0, cipherDataByte.length);
      			return new String(arrayOfBytes, StandardCharsets.UTF_8);
      		} catch (Exception e) {
      			System.out.println("SM2解密時出現異常");
      		}
      		return result;
      	}
      }
      

      SM3Util.java

      import org.bouncycastle.crypto.digests.SM3Digest;
      import org.bouncycastle.jce.provider.BouncyCastleProvider;
      
      import java.security.Security;
      
      /**
       * @Description: 國密SM3摘要算法幫助類
       * @Author: wucheng
       * @CreateDate: 2020/2/16 16:36
       */
      public class SM3Util {
      	static {
      		Security.addProvider(new BouncyCastleProvider());
      	}
      
      	public byte[] digest(String input) {
      		SM3Digest sm3Digest = new SM3Digest();
      		int length = input.length();
      		byte[] data = input.getBytes();
      		sm3Digest.update(data, 0, length);
      		byte[] ret = new byte[sm3Digest.getDigestSize()];
      		sm3Digest.doFinal(ret, 0);
      		return ret;
      	}
      }
      

      SM4Key.java

      import org.bouncycastle.jce.provider.BouncyCastleProvider;
      
      import javax.crypto.KeyGenerator;
      import java.security.SecureRandom;
      import java.security.Security;
      
      /**
       * @Description:
       * @Author: wucheng
       * @CreateDate: 2020/2/16 16:51
       */
      public class SM4Key {
      	static {
      		Security.addProvider(new BouncyCastleProvider());
      	}
      
      	public static byte[] generateKey() throws Exception {
      		KeyGenerator kg = KeyGenerator.getInstance("SM4", BouncyCastleProvider.PROVIDER_NAME);
      		kg.init(128, new SecureRandom());
      		return kg.generateKey().getEncoded();
      	}
      }
      

      SM4Util.java

      import org.bouncycastle.jce.provider.BouncyCastleProvider;
      
      import javax.crypto.Cipher;
      import javax.crypto.spec.IvParameterSpec;
      import javax.crypto.spec.SecretKeySpec;
      import java.security.Security;
      
      /**
       * @Description: 國密SM4對稱加解密算法幫助類
       * @Author: wucheng
       * @CreateDate: 2020/2/16 16:38
       */
      public class SM4Util {
      	static {
      		Security.addProvider(new BouncyCastleProvider());
      	}
      
      	/**
      	 * SM4 加密
      	 * 
      	 * @param input                 明文數據
      	 * @param key                   密鑰
      	 * @param sm4ModeAndPaddingEnum 加密模式和padding模式
      	 * @param iv                    初始向量(ECB模式下傳NULL)
      	 * @return
      	 * @throws Exception
      	 */
      	public byte[] encrypt(byte[] input, byte[] key, SM4ModeAndPaddingEnum sm4ModeAndPaddingEnum, byte[] iv)
      			throws Exception {
      		return sm4(input, key, sm4ModeAndPaddingEnum, iv, Cipher.ENCRYPT_MODE);
      	}
      
      	/**
      	 * SM4 解密
      	 * 
      	 * @param input                 密文數據
      	 * @param key                   密鑰
      	 * @param sm4ModeAndPaddingEnum 加密模式和padding模式
      	 * @param iv                    初始向量(ECB模式下傳NULL)
      	 * @return
      	 * @throws Exception
      	 */
      	public byte[] decrypt(byte[] input, byte[] key, SM4ModeAndPaddingEnum sm4ModeAndPaddingEnum, byte[] iv)
      			throws Exception {
      		return sm4(input, key, sm4ModeAndPaddingEnum, iv, Cipher.DECRYPT_MODE);
      	}
      
      	private static byte[] sm4(byte[] input, byte[] key, SM4ModeAndPaddingEnum sm4ModeAndPaddingEnum, byte[] iv,
      			int mode) throws Exception {
      		IvParameterSpec ivParameterSpec = null;
      		if (iv != null) {
      			ivParameterSpec = new IvParameterSpec(iv);
      		}
      		SecretKeySpec sm4Key = new SecretKeySpec(key, "SM4");
      		Cipher cipher = Cipher.getInstance(sm4ModeAndPaddingEnum.getName(), BouncyCastleProvider.PROVIDER_NAME);
      		if (ivParameterSpec == null) {
      			cipher.init(mode, sm4Key);
      		} else {
      			cipher.init(mode, sm4Key, ivParameterSpec);
      		}
      		return cipher.doFinal(input);
      	}
      }
      

      SM4ModeAndPaddingEnum.java

      /**
       * @Description: SM4對稱加解密算法中的模式和padding方式枚舉類
       * @Author: wucheng
       * @CreateDate: 2020/2/16 16:39
       */
      public enum SM4ModeAndPaddingEnum {
      	SM4_ECB_NoPadding("SM4/ECB/NoPadding"), SM4_ECB_PKCS5Padding("SM4/ECB/PKCS5Padding"),
      	SM4_ECB_PKCS7Padding("SM4/ECB/PKCS7Padding"), SM4_CBC_NoPadding("SM4/CBC/NoPadding"),
      	SM4_CBC_PKCS5Padding("SM4/CBC/PKCS5Padding"), SM4_CBC_PKCS7Padding("SM4/CBC/PKCS7Padding");
      
      	private String name;
      
      	SM4ModeAndPaddingEnum(String name) {
      		this.name = name;
      	}
      
      	public String getName() {
      		return name;
      	}
      }
      

      實現

      posted on 2023-06-11 22:04  樸傷色  閱讀(125)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 天天躁夜夜躁天干天干2020| 中文国产成人久久精品小说| 黄页网址大全免费观看| 人妻激情偷乱一区二区三区| 中文日产幕无线码一区中文| 成人午夜视频在线| 少妇被无套内谢免费看| 综合色天天久久| 国产精品亚洲二区在线播放| 久久无码人妻精品一区二区三区 | 久久人人爽人人爽人人av| 久久精品国产亚洲精品色婷婷| 四虎永久免费精品视频| 国产中文99视频在线观看| 亚洲国产日韩一区三区| 欧美一区二区三区成人久久片| 小嫩批日出水无码视频免费| 中文字幕日韩精品有码视频 | 视频一区二区 国产视频| 国产亚洲一级特黄大片在线| 亚洲国产精品久久久久秋霞 | 日韩精品亚洲专区在线观看| 亚洲偷自拍另类一区二区| 中文字幕精品av一区二区五区| 性男女做视频观看网站| 一区二区三区无码免费看| 亚洲熟女乱色一区二区三区| 西吉县| 国产精品毛片在线看不卡| 亚洲综合视频一区二区三区| 九九re线精品视频在线观看视频| 国产成人毛片无码视频软件| 色综合久久久久综合体桃花网| 97精品伊人久久大香线蕉APP| 成人拍拍拍无遮挡免费视频| 无码日韩精品一区二区免费 | 国产成人亚洲日韩欧美| 自拍视频在线观看成人| 国产精品国产三级国产试看| 亚洲av影院一区二区三区| 国产成AV人片久青草影院|