2013-11-24 35 views
0

我正在使用使用4字節密鑰的加密算法。它的工作原理是這樣使用整數密鑰實現加密算法:如何在此過程中存儲密鑰

(pseudocode) 
for i = 0 to size_of_data 
    data[i] ^= key[i % 4] 

    if (i % 4 == 0) 
     key *= 5 
     key += 2893 
    end 
end 

所以基本上,每次你到達關鍵的最後,您可以通過一些固定的量與下一組的字節,然後再繼續繁衍的關鍵價值。

我的問題與我在解密數據時應如何存儲密鑰有關。我可以選擇將它作爲一個字節數組存儲,這很容易迭代,但如果我必須對字節數組進行一些數學運算,它會變得有點複雜。另一方面,我可以將密鑰存儲爲字節數組的4個字節的整數表示形式,然後執行相應的移位操作來異或正確的字節。這使得修改密鑰變得很容易,因爲我已經使用了一個整數。

什麼是更好的方法來解決這個問題?兩者都是有效的解決方案,但是當涉及字節操作時,可能會有更好的方法。

回答

1

當您對其使用整數運算時,最好將密鑰保留爲無符號整數。然後通過移動該值來檢索值,例如, data[i] ^= ((key >> ((i % 4) * 8)) & 0xFF)

+0

對不起,如果上面有問題,我的c有點生疏。基本上你可以通過移位一個整數並得到最低有效位來檢索字節值。 –