一、准备加密工具
我这里准备的是SM2加密方式,这里加密工具,根据自己的需要准备相应的加密工具即可,我的代码会在上传到git,可自行下载。
1.获取公钥私钥
在SM2Utils类里面有随机获取的方式
/**
* @method generateKeyPair
* @desc 生成随机秘钥对
* @version V1.0.0
* @Param:
* @author xukang
* @date 2022/1/25 15:26
* @return void
*/
public static void generateKeyPair() {
SM2 sm2 = SM2.Instance();
AsymmetricCipherKeyPair key = sm2.ecc_key_pair_generator.generateKeyPair();
ECPrivateKeyParameters ecpriv = (ECPrivateKeyParameters) key.getPrivate();
ECPublicKeyParameters ecpub = (ECPublicKeyParameters) key.getPublic();
BigInteger privateKey = ecpriv.getD();
ECPoint publicKey = ecpub.getQ();
System.out.println("公钥: " + Util.byteToHex(publicKey.getEncoded()));
System.out.println("私钥: " + Util.byteToHex(privateKey.toByteArray()));
}
main方法运行可获得
public static void main(String[] args) throws Exception {
//生成密钥对
generateKeyPair();
}
2.验证加密工具是否正确
在SM2Utils工具类里面分别有加密方式和解密方式,拿到刚刚生成的公钥和私钥,编写测试main方法,验证加密解密是否正确。
public static void main(String[] args) throws Exception {
//生成密钥对
generateKeyPair();
String plainText = "abcA沙发上的范德萨的发生富商大贾的三的撒范德萨发送到是打发富士达爱是飞洒发送到大丰收大丰收的abc";
byte[] sourceData = plainText.getBytes();
//下面的秘钥可以使用generateKeyPair()生成的秘钥内容
// 国密规范正式私钥
String prik = "1565711FE3C1F48046B5B01060D12493F3F7631ABAF5CC3F09BB2890DF5317E7";
// 国密规范正式公钥
String pubk = "048BB63E6FD9622759AD7173F9EB670200500D02B1F11026FB27CF6F3007D60DE84060AF22C23DF8C9C8ED0C5EE76FBEFE4631C8A0C66ED0C3368867B1745339D6";
System.out.println("加密: ");
String cipherText = SM2Utils.encrypt(Util.hexToByte(pubk), sourceData);
System.out.println(cipherText);
System.out.println("解密: ");
plainText = new String(SM2Utils.decrypt(Util.hexToByte(prik), Util.hexToByte(cipherText)));
System.out.println(plainText);
}
得到的结果如下: