期末程式設計 利用位運算加密

2021-07-25 19:38:32 字數 903 閱讀 5994

#include #include #define n_p 8

#define n_k 3

int main()

//得到八個字元的字串實際長度是九個位元組,會把'\0'會把key[0]擠掉

key[0]=(key[0]<>(sizeof(key[0])*8-n_k));

//newkey[0]=(key[0]<<3)|(key[0]>>(sizeof(key[0])*8-3));

//_rotl和_rotr函式式對無符號整數進行迴圈移位的,這裡是無符號字元型資料

//newkey[2]=(key[2]>>3)|(key[2]<

key[2]=(key[2]>>n_k)|(key[2]<

//這裡key[2]>>3)|(key[2]<

//因為》後面跟的3是乙個整型,所以自動把key[0]<<3的結果轉化為了整型

//而把它賦值給乙個unsigned char型變數後,結果自動轉化為unsigned char型數

//即轉化為乙個位元組儲存

//而之前我直接把key[2]>>3)|(key[2]<

//沒有轉化為unsigned char型的過程,所以還是按照整型的四個位元組儲存

//所以本該溢位的位儲存下來,並按照整型解釋,所以結果就不對了

//整型數化為無符號的字元型數會發生截斷,即把前三個位元組截掉

if(j==1)

encrypt(password,key);

printf("the password encrypted is:");

for(i=0; i

測試結果:

利用位運算做加法

一直沒有注意位運算的使用,無意中看到利用位運算做加法,感覺比較有意思,就學習了下,感覺還挺有趣。現在簡單介紹一下,防止以後遺忘。假設我們要計算1 2的和,其中1的二進位制表示為01,2的二進位制為10。二進位制的加法主要分為三步 對1和2的二進位制進行異或 相等為0,不相等為1,即0 0 0,0 1...

利用異或進行加密,運算

int a 20 int b 30 int a a b int b a b 獲取b的值 int a b a 獲取a的值string encrytion 我是加密之前的資料 char encrytionchars encrytion.tochararray for int i 0 ichar encr...

利用位運算解決排序問題(摘自程式設計珠璣)

問題背景 已知資料的取值範圍在0 10000000,且所取資料不重複,將輸入的資料排序並盡可能的使用少的記憶體空間 define bitsperrword 32 define shift 5 define mask 0x1f define n 10000000 include int a 1 n b...