もちろん分かっていて書いているんだろうけど。
int d = digest[i]; if (d < 0) {//byte型では128〜255が負値になっているので補正 d += 256; }
この処理はbyteのビット列をそのままintの下位8ビットにコピーしたいということ。実は一行で書ける。
int d = 255 & (int)digest[i];
キャストの記述は省略可能。こういうビットを操作する的処理は素直にビット演算を使った方が楽。255では何をやってるかわかりにくいので0xFFの方がいいかも。