2014-10-22 42 views
0

我是新的C + +代碼,我嘗試打開crypt ++庫中的AES代碼添加圓鍵和混合列,但我沒有知道如何訪問它們 任何一個可以幫助我,請 感謝我怎麼才能找到加密輪密鑰和密碼+庫的AES混合列代碼

+1

它們可能[在此文件中](http://sourceforge.net/p/cryptopp/code/HEAD/tree/trunk/c5/rijndael.cpp)。你的問題到底是什麼 - 尋找來源,或者認識到這些部分或其他東西?如果你只是想定義,你不能找到一個更簡單的參考實現或讀取算法描述的地方? – Rup 2014-10-22 08:53:04

+0

謝謝,但我需要的加密代碼(sbox_add輪密鑰和混合列) – Mohammad 2014-10-22 09:42:43

+1

他們不是在那個文件?它特別是您想要的Crypto ++實現嗎?它是通用的可移植C實現還是彙編優化實現?他們都在那個檔案裏。 – Rup 2014-10-22 09:59:12

回答

-1

我認爲這是不容易找到AES輪的內部代碼,

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-box
  • t是關鍵
  • a的一個32位的部,b,c, d是當前塊的012位的32位部分
+0

但我的問題,如果這個代碼在crypto ++庫中使用 – Mohammad 2014-10-22 10:16:34

+0

是的,該鏈接是到SourceForge上的[crytopp](http://sourceforge.net/projects/cryptopp/)項目。爲什麼你特別需要Crypto ++實現? – Rup 2014-10-22 10:18:15

+0

雖然這是便攜式版本;取決於你編譯它的方式以及它運行的是什麼系統,可能真的是使用文件中的一個彙編器實現。 – Rup 2014-10-22 10:23:29