2011-07-21 32 views
3

我需要一個簡單的字符串sha256生成器類。我不想爲openSSL或Cripto ++構建大型庫 - 我只想將字符串轉換爲sha256。如何創建這樣的類或從哪裏得到它?C++如何使簡單的sha256發電機提升?

+4

哪個邊信道攻擊是相關的? – CodesInChaos

+0

爲什麼「提升」是相關的?你看過算法嗎? –

+3

如果你沒有涉及數學的豐富經驗,通常嘗試自己實現複雜的密碼學是一個壞主意。 – kcbanner

回答

2

和其他人一樣,我的印象是SHA256下的哈希算法不夠簡單,無法簡單地將自己實現爲更大編碼項目的子集。如果你看看wikipedia page for SHA-2,你會發現一些相當密集的數學。如果你想要真正的加密摘要(數學理論本身),可以找到here。如果你像大多數重點不在安全的程序員那樣,那麼你可能會想簡單地使用別人經過測試和嘗試的實現。你可以找到好幾個here。讓我知道這是否有幫助。對不起,我無法用直接代碼或其他性質回答你的問題。

1

你想要這個嗎?

static void 
sha2_round(const unsigned char *data, sph_u32 r[8]) 
{ 
    int i; 
    sph_u32 a, b, c, d, e, f, g, h; 
    sph_u32 w[64]; 

    for (i = 0; i < 16; i ++) 
     w[i] = sph_dec32be_aligned(data + (4 * i)); 
    for (i = 16; i < 64; i ++) { 
     w[i] = SPH_T32(SSG2_1(w[i - 2]) + w[i - 7] 
      + SSG2_0(w[i - 15]) + w[i - 16]); 

http://www.saphir2.com/sphlib/ 和下載。它在GPL下。看看sha2.c

要小心,它沒有很多文檔。它是爲那些已經知道自己在做什麼的人設立的。

0

GNU coreutils有一個非常簡單的源代碼。 只是下載coreutils,他們甚至有一個你可以構建的測試套件,源代碼充滿了評論和文檔。

2

您可以直接在RFC 6234的第8部分找到C源代碼。確保你也檢查errata

+0

@Jerry Coffin:同意,更正 –