gpt4 book ai didi

java - Bouncy CaSTLe ECIES 压缩格式

转载 作者:行者123 更新时间:2023-12-01 18:55:26 30 4
gpt4 key购买 nike

我正在使用充气城堡 ECIES 和 CBC 模式提供程序中的 AES 来加密数据:

Cipher iesCipher = Cipher.getInstance("ECIESWITHAES-CBC");
iesCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] ciphertext = iesCipher.doFinal(plaintext);

这会产生格式如下的密文:

0x04 || coordinate x || coordinate y || PKCS5 padded ciphertext || 20-byte HMAC-digest

0x04表示未压缩的格式,其中还存储了y坐标。使用例如。 secp256k1,这会导致 32 字节不必要的开销。

现在我想使用带有 0x020x03 前缀的压缩格式。

不幸的是,我没有找到用于实现此目的的参数规范。

最佳答案

我通过将 BC IESParameterSpec 中的 usePointCompression 标志设置为 true 成功解决了这个问题。

The point compression flag is false by default.

不幸的是,这个标志不是他们的 ECIESTest 的一部分,所以我使用他们的加密模式配置(派生、编码和初始化 vector )来尝试该标志:

byte[] derivation = Hex.decode("202122232425262728292a2b2c2d2e2f");
byte[] encoding = Hex.decode("303132333435363738393a3b3c3d3e3f");
byte[] nonce = Hex.decode("000102030405060708090a0b0c0d0e0f");

Cipher c = Cipher.getInstance("ECIESwithAES-CBC", "BC");
IESParameterSpec params = new IESParameterSpec(derivation, encoding, 128, 128, nonce, true);
c.init(Cipher.ENCRYPT_MODE, publicKey, params);
byte[] ciphertext = c.doFinal(plaintext);

这会产生所需的格式:

0x02 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
0x03 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest

取决于相应的 y 坐标(正/负)。

关于java - Bouncy CaSTLe ECIES 压缩格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53477286/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com