以下是收集的,並且自己用到過的小技巧集錦,寫這個主要是因為,長時間不接觸,忘記了很多的小技巧了,等到自己再去使用的時候。。。。天哪,就是折磨人。所以,從這個post裡就開始收集下小「技巧」或者「小演算法」。但是,都是很些很簡單的東西,也會有複雜的東西。
我們都知道aes加密的過程中需要對進行列混合的運算。在程式設計實現的時候,有的人的列混合函式寫地比較冗長煩瑣,但是有點容易理解。在小夥伴的推薦下,看到了這個裡面的小技巧。當時是覺得有點難理解,但是理解過後,恍然大悟,覺得誰第乙個寫這個函式的人好聰明。以後如果可以碰到類似的矩陣操作可以按照這種思想去進行。
列混合的矩陣如下:⎡⎣
⎢⎢⎢02
0101
0303
0201
0101
0302
0101
010302⎤
⎦⎥⎥⎥
(4)
**如下:
#include
void mixcolumns (int intput[4][4],int output[4][4]);
int main()
}mixcolumns(intput,output);
printf("輸出列混合結果為:\n");
for(i=0;i<4;i++)
printf("\n");
}return0;}
//•的運算
//如果0xaf轉換成二進位制的第一位為1,則向左移位1位,並且和0x1b異或
//如果0xaf轉換成二進位制的第一位為0,則向左移位1位即可
unsigned
char xtime(unsigned
char input)
return temp;
}void mixcolumns (int intput[4][4],int output[4][4])}}
很明顯,這個技巧的核心就是在
output[i][j] = xtime(intput[i%4][j]) ^ (intput[(i+1)%4][j] ^ xtime(intput[(i+1)%4][j]))
^ intput[(i+2)%4][j]
^ intput[(i+3)%4][j];
解釋說明:
xtime(input[i%4][j]) ^ (intput[(i+1)%4][j] ^ xtime(intput[(i+1)%4][j]))給的範例://此句是對0x02和0x03一起的操作,因為矩陣的規律就是0x02和0x03必左右相鄰,可以使用取餘的方式來讓0x02和0x03的操作放在一起進行,就會簡單很多
執行結果如下:
如果還是無法理解,可以根據那個矩陣代個值算下~
C語言中的小技巧
看看下面一段程式的功能 testrcunit.cpp 定義控制台應用程式的入口點。include typedef void cunit test case func type brief 測試用例鍊錶結點。儲存測試用例的函式指標和測試用例的名字。typedef struct tagcunittest...
C語言迴圈小技巧
寫 有兩類追求,一種是追求實用 coder 一種是追求 藝術 artist 我是那種追實用追膩了,偶然追一下藝術 就是偶然和藝術有一腿 的那種coder 很多人,已經習慣了for i 0 i n 又或者,有的人知道平方根的優化 int isprime int n 再或者,消除偶數 int ispri...
C語言的偏方 小技巧而已
在c語言的世界裡存在乙個關於結構體的偏門技巧,例如 struct str type str type str type用於儲存字串 我只是舉例,事實上這個結構體沒什麼用處 乍看上去str type只能儲存長度為 1的字串 0 但是,通過寫下如下的 你將突破這個限制 str len 5 str typ...