public void test2() { // BC中已经定义好的SM2曲线 ECCurve localECCurve = GMNamedCurves.getByName("sm2p256v1").getCurve(); // 公钥der格式有前缀公钥名称、公钥参数,后面是XY,xy前面必须有04,表示是x和y,03表示x压缩,02表示x不压缩 String s4 = "04F58EFDF08811BC76F52D08ABB6B62D2F9C3BFD5FACDAA7B6A7660F52236A5B8A2A3712FB6ACC90BE0519217BAED6EA47A1146610575924CCAB30B148FCEAE220"; // 构造公钥点ECPoint X9ECPoint localX9ECPoint = new X9ECPoint(localECCurve, BaseUtils.hex2byte(s1)); System.out.println(localX9ECPoint.getPoint()); // 构造domainParams,都可以从定义好的SM2曲线中获得 ECDomainParameters domainParams = new ECDomainParameters(GMNamedCurves.getByName("sm2p256v1").getCurve(), GMNamedCurves .getByName("sm2p256v1").getG(), GMNamedCurves.getByName("sm2p256v1").getN()); // 有公钥点ECPoint和domainParams构造成公钥参数 ECPublicKeyParameters pk = new ECPublicKeyParameters(localX9ECPoint.getPoint(), domainParams); System.out.println(pk.getQ()); // 利用BC提供的lightweight API进行加密 SM2Engine sm2Engine = new SM2Engine(); byte[] m = "encryption standard中午".getBytes(); sm2Engine.init(true, new ParametersWithRandom(pk, new SecureRandom())); try { byte[] enc = sm2Engine.processBlock(m, 0, m.length); System.out.println("enc:" + BaseUtils.byte2hex(enc)); } catch (InvalidCipherTextException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
SM2加密
猜你喜欢
转载自linuxgao.iteye.com/blog/2389904
今日推荐
周排行