【问题标题】:ECC Engine with BouncyCastle for Java带有 BouncyCastle for Java 的 ECC 引擎
【发布时间】:2014-01-20 11:04:33
【问题描述】:

嗯,

我需要使用 java 制作 api 来加密、解密和有关 Cryptografy 的其他内容。我正在使用 bouncycastle 框架来做。但是我在BC Framework中找不到Elliptic Curve Cryptigrafy Engine,我找到了RSAEngine、IESEngine。

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

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()));

但有时我没有私钥,因为用公钥加密。

有人帮帮我吗?

【问题讨论】:

    标签: java bouncycastle elliptic-curve


    【解决方案1】:

    嗯,据我所知,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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多