2014-01-24 40 views
0

I 具有使用4字節IV來加密一些數據。但是,我正在使用的加密算法(AES128)需要一個16字節(128位)的密鑰。說,我的代碼如下:有什麼辦法可以將4字節的數字表示爲16字節的數字嗎?

#include<gcrypt.h> 
void encrypt(){ 
    int IV = 6174; 
    gcry_cipher_hd_t hd;   
    errStatus = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0); 
    errStatus = gcry_cipher_setkey(hd, keyBuffer, 16); 
    gcry_cipher_setiv(hd, &IV, 16); 
    gcry_cipher_encrypt(hd, output, 16, bytesToEncrypt, 16); 
} 

發言權keyBuffer包含一個16字節的密鑰和bytes, output`分別我的輸入和輸出。我如何正確給予IV?

+2

這似乎是錯誤的事情。小型IV將危及加密安全。如果你在你的例子中使用了一個常數IV,它將會大大受損。對於加密的每條消息,IV應該是隨機的並且是不同的。 – interjay

+0

我知道。它只是一個熟悉加密庫的類練習。 – TheRookierLearner

回答

0

你可以試試這個代碼只是爲了避免緩衝區溢出?我自己沒有測試過這個,雖然

int IV[4] = { 6174 }; // { 6174, 0, 0, 0 } 
+0

「Segmentation fault(core dumped)」:-( – TheRookierLearner

+0

'gcc -O0 -g'(oh-zero gee)會產生一個適合於調試的二進制文件。你能運行'gdb'下的調試二進制文件來準確查看SEGV發生了什麼?你可以鍵入'bt'來顯示堆棧幀。http://cs.baylor.edu/~donahoo/tools/gdb/tutorial.html – nodakai

相關問題