java代码生成密钥库_【Java加解密系列】- SM2生成密钥
國密算法是國家密碼局制定標準的一系列算法,包括SM1、SM2、SM3、SM4等。其中,SM1是采用硬件實現的,不予討論;SM2是非對稱加密算法;SM3是摘要算法;SM4是對稱加密算法。本系列文章將講解SM2、SM3、SM4 Java版本實現,所有的代碼實現都是基于BC庫來做的,本篇將講解如何生成SM2密鑰對。
BC庫是實現加解密算法的基礎庫,我們首先要在代碼里引入BC庫,如下:
org.bouncycastle
bcprov-jdk15on
1.59
SM2是非對稱加密,密鑰是由公鑰和私鑰組成的密鑰對。在使用SM2算法進行加解密前,必須要先生成密鑰對。代碼如下:
/*** SM2算法生成密鑰對* @return 密鑰對信息*/
public static KeyPair generateSm2KeyPair() {
try {
final ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");
// 獲取一個橢圓曲線類型的密鑰對生成器
final KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", new BouncyCastleProvider());
SecureRandom random = new SecureRandom();
// 使用SM2的算法區域初始化密鑰生成器
kpg.initialize(sm2Spec, random);
// 獲取密鑰對
KeyPair keyPair = kpg.generateKeyPair();
return keyPair;
} catch (Exception e) {
LOGGER.error("generate sm2 key pair failed:{}", e.getMessage(), e);
throw new BusinessException("生成密鑰對失敗");
}
}
代碼依賴對象都是BC庫和java security庫里的,只有BusinessException是自己定義的業務異常,可自行定義即可。測試代碼如下:
@Test
public void generateSm2KeyPairTest() {
KeyPair keyPair = SecretKeyUtils.generateSm2KeyPair();
System.out.println(Base64Utils.encode(keyPair.getPrivate().getEncoded()));
System.out.println(Base64Utils.encode(keyPair.getPublic().getEncoded()));
}
Base64Utils是我自己寫的Base64工具類,實現方式有很多,自己在網上找下即可,也可轉成Hex輸出。執行測試代碼,得到Base64之后的密鑰對如下:
MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgVGXZII9dj8Ou8FzrnvXOletkk1oNrJ5JLxkQu8IVl0mgCgYIKoEcz1UBgi2hRANCAARfJ7o8rj0aOe9reb8Ink8gzNmVrIypxs1Upt8XSWWVW/ighjvKWD1D4HMq14uwuBMNJq/mldwcx0+wvW1sOpes
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEXye6PK49Gjnva3m/CJ5PIMzZlayMqcbNVKbfF0lllVv4oIY7ylg9Q+BzKteLsLgTDSav5pXcHMdPsL1tbDqXrA==
總結
以上是生活随笔為你收集整理的java代码生成密钥库_【Java加解密系列】- SM2生成密钥的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: idea插件的安装及使用
- 下一篇: jtable.js 弹出框自适应高度