java ecc加密是什么,让我们一起了解一下:
ecc是椭圆曲线密码,利用椭圆曲线来实现的密码技术的统称,java中ecc加密通过使用JPBC库调用ECC椭圆曲线加解密算法,能够编写简单的实验代码进行正确的ECC加密和解密。
为什么使用椭圆曲线加密算法?
RSA的解决分解整数问题需要亚指数时间复杂度的算法,而目前已知计算椭圆曲线离散对数问题(ECDLP)的最好方法都需要全指数时间复杂度。这意味着在椭圆曲线系统中我们只需要使用相对于RSA 短得多的密钥就可以达到与其相同的安全强度。
例如,一般认为160比特的椭圆曲线密钥提供的安全强度与1024比特RSA密钥相当。使用短的密钥的好处在于加解密速度快、节省能源、节省带宽、存储空间。
比特币以及中国的二代身份证都使用了256 比特的椭圆曲线密码算法。
ecc算法的过程是怎样的?
1、公私钥生成:
Alice首先构造一条椭圆曲线 E E E,在曲线上选择一点 G G G作为生成元,并求 G G G的阶为 n n n,要求 n n n必须为质数。
Alice选择一个私钥 k ( k < n ) k (k < n) k(k Alice将公钥组 E 、 Q 、 G E、Q、G E、Q、G发送给Bob。 2、加密过程: Bob收到信息后,将明文编码为 M M M, M M M为曲线上一点,并选择一个随机数 r r r( r < n , n r < n, n r Bob计算点 C i p h e r 1 Cipher1 Cipher1与 C i p h e r 2 Cipher2 Cipher2即两段密文,计算方法如下: C i p h e r 1 = M + r Q Cipher1 = M + rQ Cipher1=M+rQ C i p h e r 2 = r G Cipher2 = rG Cipher2=rG Bob把 C i p h e r 1 Cipher1 Cipher1和 C i p h e r 2 Cipher2 Cipher2发给Alice。 3、解密过程: Alice收到密文后,为了获得 M M M,只需要 C i p h e r 1 − k ⋅ C i p h e r 2 Cipher1 - k · Cipher2 Cipher1−k⋅Cipher2,因为 C i p h e r 1 − k ∗ C i p h e r 2 = M + r Q − k r G = M + r k G − k r G = M Cipher1 - k*Cipher2 = M + rQ - krG = M + rkG - krG = M Cipher1−k∗Cipher2=M+rQ−krG=M+rkG−krG=M。将M解码即可。 java ecc加密具体代码展示: 以上就是小编今天的分享了,希望可以帮助到大家。//加密算法
public static String encrypt(Element P_b, String data, int k, Element P_t, Element G){
try {
byte[] datasource=data.getBytes("utf8");
String CArray = "A";
//计算P_1
Element P_1 = G.duplicate().getImmutable().mul(k);
System.out.println("加密过程中计算出的P_1:"+ P_1);
//计算P_2
Element P_2 = P_b.duplicate().getImmutable().mul(k);
System.out.println("加密过程中计算出的P_2:"+ P_2);
//计算P_end
Element P_end = P_t.add(P_2);
System.out.println("加密过程中计算出的P_end:"+ P_end);
//计算密文C
String[] p_txy = P_t.toString().split(",");
BigInteger p_tx = new BigInteger(p_txy[0]);
BigInteger p_ty = new BigInteger(p_txy[1]);
for(int i=0;i