带有BouncyCastle for Java的ECC引擎

带有BouncyCastle for Java的ECC引擎,java,bouncycastle,elliptic-curve,Java,Bouncycastle,Elliptic Curve,那么 我需要使用java制作api来加密、解密和其他关于Cryptografy的东西。我正在使用bouncycastle框架来完成。但我在BC框架中找不到椭圆曲线加密引擎,我找到了RSAENGE,IESENGE 我想用公钥加密,用私钥解密,但我发现的所有示例都需要两个密钥来加密,所以我不明白。喜欢它: Security.addProvider(new BouncyCastleProvider()); KeyPairGenerator kpg = (KeyPairGenerator) K

那么

我需要使用java制作api来加密、解密和其他关于Cryptografy的东西。我正在使用bouncycastle框架来完成。但我在BC框架中找不到椭圆曲线加密引擎,我找到了RSAENGE,IESENGE

我想用公钥加密,用私钥解密,但我发现的所有示例都需要两个密钥来加密,所以我不明白。喜欢它:

Security.addProvider(new BouncyCastleProvider());

    KeyPairGenerator kpg = (KeyPairGenerator) KeyPairGenerator.getInstance("ECIES", "BC");

    kpg.initialize(192, new SecureRandom());

    KeyPair keyPair = kpg.generateKeyPair();
    PublicKey pubKey = keyPair.getPublic();
    PrivateKey privKey = keyPair.getPrivate();

    byte[] d = new byte[]{1, 2, 3, 4, 5, 6, 7, 8}; // 1. can someone tell me what this parameters does?
    byte[] e = new byte[]{8, 7, 6, 5, 4, 3, 2, 1};

    IESParameterSpec param = new IESParameterSpec(d, e, 192); // 2. and this parameters?
    IEKeySpec c1Key = new IEKeySpec(privKey, pubKey);
    System.out.println(c1Key.getPublic());

    Cipher cipher = Cipher.getInstance("ECIES", "BC");
    cipher.init(Cipher.ENCRYPT_MODE, c1Key, param);
    System.out.println(cipher.doFinal("test12345678900987654321".getBytes()));
但有时候我没有私钥,就像用公钥加密一样


有人帮我吗?

嗯,据我所知,ECC需要一个不同的密钥来加密和解密。这就是为什么它被称为非对称加密。
假设Alice想向Bob发送消息M(x,y)
1.曲线函数为
y^2=x^3+ax+b mod p
,带有一个参考点
G(x,y)

2.Alice选择一个私钥
nA
并计算她的公钥
Qa=nA.G

3.Bob选择一个私钥
nB
并计算他的公钥
Qb=nB.G

4.Alice加密消息
D=M+na.Qb
(D=密文)并将
(Qa,D)
发送给Bob
5.为了解密消息,Bob计算
M=D+(-nb).Qa
并恢复
M

希望这有帮助