java ecc加密

作者:原创时间:2022-03-30
文档

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

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java formatter java echarts java ehcache java email java empty java encapsulation java future java generator java enhancer java generic java enterprise java environment java epoll java error java escape java event java exchange java execute 微信群怎么找 怎么导出微信聊天记录 java fork java foreach循环 java ear java flume java dynamic java dto java drools java flink java dowhile java flatmap java findfirst java fileinputstream java file.exists() java dockerfile java field获取值 java field java divide java feign java fastjson java dict