1
我正在爲Vala和Linux寫一個跨平臺的應用程序。我需要實現Hmac的安全性;但不幸的是,GHmac類(link)尚未被移植到Windows。我在wikipedia上找到了Hmac的算法(link),我相信我正確實現了它,但是與內置類相比,我沒有得到相同的結果。如果任何人都可以幫我找到一個令人驚歎的bug,那麼下面是我的功能。在Vala中編寫Hmac函數
public static string compute_for_data(ChecksumType type, uint8[] key,
uint8[] data) {
int block_size = 64;
uint8[] mod_key = key;
uint8[] outer = new uint8[block_size];
uint8[] inner = new uint8[block_size];
if (mod_key.length > block_size) {
mod_key = Checksum.compute_for_data(type, key).data;
}
mod_key.resize(block_size);
for (int i=0; i < mod_key.length; i++) {
outer[i] = mod_key[i]^0x5c;
inner[i] = mod_key[i]^0x36;
}
int i = inner.length;
inner.resize(i + data.length);
for (int j=0; j < data.length; j++) {
inner[i + j] = data[j];
}
inner = Checksum.compute_for_data(type, inner).data;
i = outer.length;
outer.resize(i + inner.length);
for (int j=0; j < inner.length; j++) {
outer[i + j] = inner[j];
}
return Checksum.compute_for_data(type, outer);
}