2011-09-08 24 views

回答

5

你問如何使用mcrypt

這是鏈接我和我想利用圖書館發現了什麼?這是一個基本框架:

#include <mcrypt.h> 

int main() 
{ 
    char algo[] = "rijndael-256"; 
    char mode[] = "cbc"; 

    char key[] = ... 
    char iv[] = ... 

    MCRYPT td = mcrypt_module_open(algo, NULL, mode, NULL); 
    if (td == MCRYPT_FAILED) { /* error */ } 

    int r = mcrypt_generic_init(td, key, keysize, iv); 

    /* use mdecrypt_generic() or mcrypt_generic() */ 

    mcrypt_generic_deinit(td); 

    mcrypt_module_close(td); 
} 

您有mcrypt_enc_get_key_size(td)mcrypt_enc_get_iv_size(td)檢查實際密鑰大小和IV的大小和提供合適的密鑰和IV數據。


編輯:因爲它是如此簡單,這裏的一個算法來添加和條PCKS7填充:

std::string add_pkcs7_padding(std::string s, std::size_t n) 
{ 
    const std::size_t fill = n - (s.length() % n); 
    s.append(fill, static_cast<char>(fill)); 
    return s; 
} 

std::string strip_pkcs7_padding(std::string s, std::size_t n) 
{ 
    const std::size_t pad = static_cast<unsigned char>(*s.rbegin()); 
    return s.substr(0, s.length() - pad); 
} 

(圖書館級代碼當然會測試n可由char來表示,並在剝離輸入字符串期間非空且填充有效。)

+0

thx爲例。我的IV是[0,0,0,0,0,0,0]。關鍵是一個32鍵的字符串,例如:KEY =「AESD-CBED-POKF-OHFB-SNCJ-POLD-OK」。你告訴我如何把這個?另外我需要一個PKCS7填充。加密結果是否在td變量中? THX – sunset

+0

加 - 這是一個.C文件嗎?如何使用MCRYPT進行編譯?我會在哪裏找到mcrypt.cpp代碼,如果我想靜態編譯它(沒有依賴關係)。謝謝!!真的很高興:) – sunset

+0

請只閱讀說明書。 mcrypt有一個偉大的手冊,應該回答所有這些。在Linux上,鍵入'man libmcrypt'。 –