注意:文中數字均為2進製或16進製制,不要與10進製混淆。
aes中的運算為面向位元組的運算,有加法和乘法兩種。
aes中的運算包含面向位元組(8位)或4位元組(雙字,32位)運算,本文只介紹面向位元組(8位)。
加法可以理解為對應位的異或運算,如:
57⊕83 ---------------------------16進製制
=01010111⊕10000011-------2進製
異或運算具體步驟(對應位相同則為0,不相同則為1)
0 1 0 1 0 1 1 1
1 0 0 0 0 0 1 1
————————
1 1 0 1 0 1 0 0
=11010100-----------------------2進製
=d4---------------------------------16進製制
乘法類似多項式乘法,再結合類似mod m(x)方式計算。
之所以說類似,是因為運用多項式乘法後,需要消去係數為偶數的項,係數為奇數的項則將係數設定為1。因為2進製計算,係數只能為0和1。mod m(x)同樣不是一般的除法取餘,而是要使用異或運算。
m(x)=x8+x4+x3+x+1
至於為什麼是這個表示式,我也不清楚,希望有數學大咖解釋一下~
具體步驟可以參考下列例題:
xtime()演算法可用於面向位元組的乘法運算,在程式開發中應用廣泛,各種語言的實現**在網上都可以查到,就不再贅述。僅在此詳述演算法的推導以及筆算解題時的使用方法。
根據定義,xtime()運算是最高項指數不大於7的多項式b(x)乘以多項式x的乘法運算。
因為是面向字元的運算,根據上述乘法原理,可以推出下列bi(i=0,1,…7)為0或1。
即:b(x)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0
xtime(b(x))=x·b(x)=(b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x )mod m(x)
=(b7x8+b6x7+b5x6+b4x5+b3x4+b2x3+b1x2+b0x )mod (x8+x4+x3+x+1)
接下來要分類討論,當b7=0
當b7=1
根據面向位元組運算的定義,多項式x就是僅有一項且最該項指數為1的多形式,可以理解為00000010(2進製)或02(16進製制)。
xtime(b(x))=b(x)·x=b(x)·00000010=b(x)·02
也就是說,xtime()可以用於計算位元組與02(00000010)的乘法。
根據公式,當b7=0,xtime()就是將位元組左移一位,末位補0;
當b7=1,xtime()就是將位元組左移一位,末位補0,再與1b(00011011)異或。
以下均為2進製或16進製制,計算過程中應用交換律與結合律。
57·01=57=01010111
57·02=xtime(57)=xtime(01010111)=10101110=ae---------------------------------------------(b7=0,左移一位,末位補0)
57·03=57·(01+02)=57⊕xtime(57)=01010111⊕10101110=11111001=f9
57·04=57·02·02=ae·02=xtime(ae)=xtime(10101110)=01000111=47---------------------(b7=1,左移一位,末位補0,異或1b)
57·08=57·04·02=47·02=xtime(47)=xtime(01000111)=10001110=8e----------------------(b7=0,左移一位,末位補0)
57·10=57·08·02=8e·02=xtime(8e)=xtime(10001110)=00000111=07----------------------(b7=1,左移一位,末位補0,異或1b)
所以57·13
=57·(10+02+01)
=57·10⊕57·02⊕57·01
=00000111⊕10101110⊕01010111
=11111110
=fe施遊,朱小平.資訊保安工程師5天修煉.中國水利水電出版社
3.如有錯誤或表述不當,歡迎批評指正。
大型整數運算 加法, 減法, 乘法
from 用int數模仿真整數的每乙個位,大於10的要進製,負數要借位。include include define max digit 500 大數運算 加法 int multiply int a,int b,int result 大數運算 乘法 int add int a,int b,int r...
使用移位和加法運算替代乘法運算
因為工作中遇到頻繁操作乘法運算導致用時過多的情況,特找了下替代方案,但實測效果並不理想,暫做記錄。include include include include define max nm a,b a b?a b define min nm a,b a b?a b define repeat num...
大數運算 整數的加法和乘法
大家剛開學的時候肯定都做過 a b吧?今天給大家出一道 a bplus版 給定兩個整數a和 b,計算 a b 的和。a和 b的範圍都是0 1e1000 這道題我們還能用 int或者 long long 來做嗎?這時候,由於a和 b的取值範圍遠遠大於資料型別給定的範圍,不能滿足較大規模的高精度數值計算...