1
저는 Windows 및 Linux 용 Vala에 크로스 플랫폼 응용 프로그램을 작성하고 있습니다. 보안을 위해 Hmac을 구현해야합니다. 하지만 불행히도 GHmac 클래스 (link)는 아직 Windows에 이식되지 않았습니다. 나는 위키 피 디아 (link)에서 Hmac의 알고리즘을 발견했다. 나는 올바르게 구현했다고 믿지만, 내장 된 클래스와 비교할 때 나는 같은 결과를 얻지 못한다. 누군가 내게 놀라운 버그를 찾는 손을 줄 수 있다면 아래에 내 기능이 있습니다.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);
}