使用Crypto ++实现ECC加密和解密时,我可以将加密文本缩小吗?

时间:2016-01-07 09:28:35

标签: java c++ cryptography bouncycastle crypto++

最近我使用Bouncy Castle和Crypto ++来做一些ECC解密&加密

经过我最后的努力,我实现了基本功能:生成密钥对,解密和加密文本。它们是C ++(使用Crypto ++)和Java(使用Bouncy Castle)的实现,但我发现这两个项目的实现是相当不同的。

所以这是我的两个相关问题:

  1. 在JAVA中我需要创建2对密钥,我不知道为什么要创建2对密钥?这是另一个用户问同一个问题another same question on stackoverflow。使用2对密钥有什么意义?

  2. 我加密&用JAVA和C ++解密一个字符串(10个字节),当然,请按照示例代码。在Java中,我在曲线prime256k1上生成两对键。在C ++中,我在曲线secp256k1上生成一对键。密钥长度均为256位。当我得到加密文本时,我发现Java加密文本的长度大约是30个字节,但加密文本的C ++长度大约是100个字节。是什么让这些如此不同?也许是因为2对钥匙?如果是这样,为什么?

1 个答案:

答案 0 :(得分:0)

  
      
  1. 使用2对钥匙有什么意义?
  2.   

这是因为您不能像使用RSA(在安全填充之后)那样使用EC加密直接加密。而是使用ECDH,这基本上是关键协议。您首先导入另一方的公钥,然后使用相同的参数创建自己的密钥对。然后,您执行导出密钥密钥种子的密钥协议。然后你只需扔掉暂时需要的私钥。这可以隐式显式执行,具体取决于实现。

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

  
      
  1. 也许是因为2对钥匙?如果是这样,为什么?
  2.   

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

当然,使用不同的mode of encryptioninclusion of the IV or not也可能会有所不同。我们需要使用已使用的协议,实现和库规范来确保这一点。

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