【问题标题】:How can I find the add round key and mix column codes in AES of the crypto++ library [closed]如何在加密 ++ 库的 AES 中找到添加轮密钥和混合列代码 [关闭]
【发布时间】:2014-10-22 08:24:41
【问题描述】:

我是 C++ 代码的新手,我尝试在 crypt++ 库中打开 AES 代码以添加轮密钥和混合列,但我不知道如何访问它们 请任何人帮助我 谢谢

【问题讨论】:

  • 他们可能是in this file。你的问题到底是什么——找到源头,或者识别那些部分,还是别的什么?如果你只想要定义,你就不能找到更简单的参考实现或在某处阅读算法描述吗?
  • 谢谢,但我需要加密代码(sbox_add 轮密钥和混合列)
  • 他们不是在那个文件里吗?它具体是您想要的 Crypto++ 实现,它是通用的可移植 C 实现还是汇编器优化的实现?它们都在那个文件中。

标签: c++ c eclipse aes crypto++


【解决方案1】:

AES 实现位于rijndael.cpp。你要了sbox,加圆键和混音操作;它们都在 QUARTER_ROUND 宏中:

  • QUARTER_ROUND_FE - 第一轮加密
  • QUARTER_ROUND_E - 后续加密轮次
  • QUARTER_ROUND_LE - 最后一轮加密

以及以D 而非E 结尾的等效解密宏。这些被定义为

#define QUARTER_ROUND(L, T, t, a, b, c, d)  \
    a ^= L(T, 3, byte(t)); t >>= 8;\
    b ^= L(T, 2, byte(t)); t >>= 8;\
    c ^= L(T, 1, byte(t)); t >>= 8;\
    d ^= L(T, 0, t);

#define TL_M(T, i, x) (*(word32 *)((byte *)T + x*8 + (i+3)%4+1))
#define QUARTER_ROUND_E(t, a, b, c, d)      QUARTER_ROUND(TL_M, Te, t, a, b, c, d)

在哪里

  • TL_M 是混合宏
  • Te是加密S盒
  • t 是密钥的 32 位部分
  • abcd 是当前块的 32 位部分

【讨论】:

  • 但是我的问题是这个代码是否在 crypto++ 库中使用
  • 是的,该链接指向 SourceForge 上的 crytopp 项目。为什么你特别需要 Crypto++ 实现?
  • 不过,这是便携式版本;取决于你如何编译它以及它运行在什么系统上,你可能真的在使用文件后面的汇编器实现之一。
  • CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink( ciphertext ) ); // stfEncryptor.Put( reinterpret_cast( plaintext.c_str() ), plaintext.length() + 1 ); stfEncryptor.MessageEnd(); ____ 此代码如何进行加密
  • 这取决于cbcEncryption 是什么——它将它应用于您提供的数据流。我假设cbcEncryption 是您从AESEncryption 创建的?这被定义为 RijndaelEncryption 的别名,它是使用我上面发布的代码实现的。
【解决方案2】:

我觉得找到AES轮次的内码并不容易,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2014-10-03
    相关资源
    最近更新 更多