如何在java项目中实现一个ECC加密算法

  介绍

本篇文章给大家分享的是有关如何在java项目中实现一个ECC加密算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

具体如下:

<强> ECC

ECC-Elliptic曲线密码学,椭圆曲线密码编码学,是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。在软件注册保护方面起到很大的作用,一般的序列号通常由该算法产生。

当我开始整理《java加密技术(二)》的时候,我就已经在开始研究ECC了,但是关于java实现ECC算法的资料实在是太少了,无论是国内还是国外的资料,无论是官方还是非官方的解释,最终只有一种答案——ECC算法在jdk1.5后加入支持,目前仅仅只能完成密钥的生成与解析。如果想要获得ECC算法实现,需要调用硬件完成加密/解密(ECC算法相当耗费资源,如果单纯使用CPU进行加密/解密,效率低下),涉及到java Card领域,PKCS # 11。其实,PKCS # 11配置很简单,但缺乏硬件设备,无法尝试!

尽管如此,我照旧提供相应的java实现代码,以供大家参考。

通过java代码实现如下:

编码器类:

import  java.math.BigInteger;   import  java.security.Key;   import  java.security.KeyFactory;   import  java.security.interfaces.ECPrivateKey;   import  java.security.interfaces.ECPublicKey;   import  java.security.spec.ECFieldF2m;   import  java.security.spec.ECParameterSpec;   import  java.security.spec.ECPoint;   import  java.security.spec.ECPrivateKeySpec;   import  java.security.spec.ECPublicKeySpec;   import  java.security.spec.EllipticCurve;   import  java.security.spec.PKCS8EncodedKeySpec;   import  java.security.spec.X509EncodedKeySpec;   import  java.util.HashMap;   import  java.util.Map;   import  javax.crypto.Cipher;   import  javax.crypto.NullCipher;   import  sun.security.ec.ECKeyFactory;   import  sun.security.ec.ECPrivateKeyImpl;   import  sun.security.ec.ECPublicKeyImpl;/* *   ,* ECC安全编码组件   *大敌;   ,* @author 梁栋   ,* @version  1.0   ,* @since  1.0   ,*/public  abstract  class  ECCCoder  extends  Coder  {   public 才能static  final  String  ALGORITHM =,“EC";   private 才能static  final  String  PUBLIC_KEY =,“ECCPublicKey";   private 才能static  final  String  PRIVATE_KEY =,“ECCPrivateKey";   ,/* *   ,,*,解密& lt; br>   ,,*,用私钥解密   ,,*,   ,,*,@param 数据   ,,*,@param 关键   ,,* @return   ,,*,@throws 例外   ,,*/public 才能;static  byte[],解密(byte[],数据,String 键),throws  Exception  {   ,,,//,对密钥解密   ,,,byte [], keyBytes =, decryptBASE64(关键);   ,,,//,取得私钥   ,,,PKCS8EncodedKeySpec  pkcs8KeySpec =, new  PKCS8EncodedKeySpec (keyBytes);   ,,,KeyFactory  KeyFactory =, ECKeyFactory.INSTANCE;   ,,,ECPrivateKey  priKey =, (ECPrivateKey) keyFactory   ,,,,,,,.generatePrivate (pkcs8KeySpec);   ,,,ECPrivateKeySpec  ECPrivateKeySpec =, new  ECPrivateKeySpec (priKey.getS (),   ,,,,,,,priKey.getParams ());   ,,,//,对数据解密   ,,,//,TODO  Chipher不支持EC算法,未能实现   ,,,Cipher  Cipher =, new  NullCipher ();   ,,,//,. getinstance(算法,keyFactory.getProvider ());   ,,,cipher.init (Cipher.DECRYPT_MODE, priKey,, ecPrivateKeySpec.getParams ());   ,,,return  cipher.doFinal(数据);   ,,}   ,/* *   ,,*,加密& lt; br>   ,,*,用公钥加密   ,,*,   ,,*,@param 数据   ,,*,@param  privateKey   ,,* @return   ,,*,@throws 例外   ,,*/public 才能;static  byte[],加密(byte[],数据,String  privateKey)   ,,,,,throws  Exception  {   ,,,//,对公钥解密   ,,,byte [], keyBytes =, decryptBASE64 (privateKey);   ,,,//,取得公钥   ,,,X509EncodedKeySpec  x509KeySpec =, new  X509EncodedKeySpec (keyBytes);   ,,,KeyFactory  KeyFactory =, ECKeyFactory.INSTANCE;   ,,,ECPublicKey  pubKey =, (ECPublicKey) keyFactory   ,,,,,,,.generatePublic (x509KeySpec);   ,,,ECPublicKeySpec  ECPublicKeySpec =, new  ECPublicKeySpec (pubKey.getW (),   ,,,,,,,pubKey.getParams ());   ,,,//,对数据加密   ,,,//,TODO  Chipher不支持EC算法,未能实现   ,,,Cipher  Cipher =, new  NullCipher ();   ,,,//,. getinstance(算法,keyFactory.getProvider ());   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在java项目中实现一个ECC加密算法