首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用Crypto++实现ECC的加密和解密时,我能使加密的文本变小吗?

当使用Crypto++实现ECC的加密和解密时,我能使加密的文本变小吗?
EN

Stack Overflow用户
提问于 2016-01-07 09:28:35
回答 1查看 455关注 0票数 0

最近,我用Bouncy城堡和Crypto++做了一些ECC解密和加密。

经过努力,我终于实现了基本的功能:生成密钥对,解密和加密文本。它们都是在C++ (使用Crypto++)和Java (使用Crypto++城堡)中实现的,但我发现这两个项目的实现非常不同。

以下是我的两个相关问题:

  1. 在JAVA中我需要创建2对键,我不知道为什么要创建2对键?这里有另一个用户问同样的问题,another same question on stackoverflow。使用2对键有什么意义?
  2. 当然,我使用JAVA和C++对字符串(10个字节)进行加密和解密,当然,遵循示例代码。在Java中,我在曲线prime256k1上生成两个键。在C++中,我在曲线secp256k1上生成一对键。键的长度都是256位。当我得到我的加密文本时,我发现Java加密文本的长度约为30字节,但加密文本的C++长度约为100字节。是什么让这一切如此不同?也许是因为那两把钥匙?如果是,为什么?
EN

回答 1

Stack Overflow用户

发布于 2016-01-07 19:21:53

  1. 用两把钥匙有什么意义?

这是因为您不能像使用RSA那样直接使用EC加密进行加密(在安全填充之后)。取而代之的是ECDH,这基本上是关键协议。首先导入对方的公钥,然后使用相同的参数创建自己的密钥对。然后执行密钥协议,派生秘密密钥种子。然后,您只需丢弃临时需要的私钥。这可以根据实现隐式或显式地执行。

现在,如果您向另一方发送您的公钥,则另一方也可以执行密钥协议并检索秘密密钥种子。这个密钥种子用作(基)一个用于实际加密数据的秘密密钥。这一方案称为EC。

  1. 也许是因为那两把钥匙?如果是,为什么?

如前所述,需要包括发送方临时使用的公钥。此密钥通常是ECC私钥大小的一到两倍。如果您只得到30字节的密文,密钥大小为256位/ 32字节,那么公钥可能不包含在密文中。

当然,使用不同的https://en.wikipedia.org/wiki/Block_cipher_mode_of_operationhttps://en.wikipedia.org/wiki/Initialization_vector也会产生不同的效果。我们需要使用的协议、实现和库规范来确保这一点。

因此,不可以使密文(大得多)更小,因为您需要对公钥进行编码。但是,您可以使用带有零IV的隐式/命名曲线和点压缩+可能的CTR模式来使密文更小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34651532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档