1
我的目標是讀取bio中存儲的數據(假設它是用於寫入操作)並計算其md5指紋。數據可以是任何東西。我做了幾次嘗試。這裏是我的最新嘗試:從linux中的生物結構散列數據
void fingerprint(struct bio * bio, unsigned char * result)
{
char * place;
char * cpy;
int total;
struct buffer_head * bh;
struct scatterlist sg;
struct hash_desc desc = {
.tfm = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC),
.flags = CRYPTO_TFM_REQ_MAY_SLEEP
};
total = 0;
cpy = kmalloc(sizeof(char) * bio->bi_io_vec[i].bv_len, GFP_KERNEL);
bh = (struct buffer_head *)bio->bi_io_vec[i].bv_page->private;
place = bh->b_data + bio->bi_io_vec[i].bv_offset;
DPRINTK("%u", bio->bi_io_vec[i].bv_offset);
DPRINTK("%u", place);
memcpy(cpy, place, bio->bi_io_vec[i].bv_len);
DPRINTK("%x", place);
DPRINTK("%x", cpy);
sg_init_one(&sg, (u8 *)cpy, bio->bi_io_vec[i].bv_len);
crypto_hash_init(&desc);
crypto_hash_update(&desc, &sg, bio->bi_io_vec[i].bv_len);
total += bio->bi_io_vec[i].bv_len;
DPRINTK("%u", bio->bi_vcnt);
DPRINTK("%u", total);
crypto_hash_final(&desc, result);
kfree(cpy);
}
哈希的結果非常相似,如果不完全一樣,他們總是偶數。我打印出了很長的結果並以十六進制顯示。這是爲什麼發生?
所以我可以在我的打印輸出中看到這些結果的碎片,但一些字符混亂。我應該以什麼格式打印輸出? –
我給出的測試向量是十六進制的。 – rossum
明白了。謝謝! –