小编asl*_*anj的帖子

使用椭圆曲线ElGamal加密AES密钥

有爱丽丝和鲍勃。我想实现以下过程:

  1. 爱丽丝使用AES加密文本并生成密钥
  2. 爱丽丝使用El Gamal的椭圆曲线使用Bobs公钥对该秘密密钥进行加密
  3. 爱丽丝将加密的文本和加密的密钥发送给鲍勃
  4. 鲍勃用他的私钥解密密钥
  5. 鲍勃使用解密的密钥解密文本
  6. 完成了

我正在使用来自Bouncycastle的ECElGamalEncryptor类。我的问题是,据我所知,此类使用公共密钥对椭圆曲线上的点进行加密,但是我的AES秘密密钥不是ECPoint,而是十六进制。

假设我有此128位密钥用于AES加密:

6D5A7134743777397A24432646294A40
Run Code Online (Sandbox Code Playgroud)

这就是我到目前为止所拥有的:

import java.math.BigInteger;
import java.security.SecureRandom;

import org.bouncycastle.asn1.x9.X9ECParameters;
import org.bouncycastle.asn1.sec.SECNamedCurves;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.ec.ECElGamalDecryptor;
import org.bouncycastle.crypto.ec.ECElGamalEncryptor;
import org.bouncycastle.crypto.ec.ECPair;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECKeyGenerationParameters;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.crypto.generators.ECKeyPairGenerator;
import org.bouncycastle.math.ec.ECPoint;
class TestClass {

  public static void main(String[] argv) {

    // Get domain parameters for example curve secp256r1
    X9ECParameters ecp = SECNamedCurves.getByName("secp256r1");
    ECDomainParameters domainParams = new ECDomainParameters(ecp.getCurve(),
                                                             ecp.getG(), ecp.getN(), ecp.getH(),
                                                             ecp.getSeed());

    // Generate a private key and a public key
    AsymmetricCipherKeyPair …
Run Code Online (Sandbox Code Playgroud)

java cryptography bouncycastle elliptic-curve elgamal

5
推荐指数
1
解决办法
208
查看次数