介绍
本篇文章给大家分享的是有关如何在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加密算法