Thắc mắc đoạn code Hàm băm SHA1

Chào các anh chị diễn đàn, hiện tại em đang tìm hiểu về hàm băm SHA-1, em có tham khảo một đoạn code sau nhưng không hiểu lắm ạ, em có search google nhưng vẫn không tìm được câu trả lời, mong anh chị giúp đỡ giải thích giúp em phương thức này, và tại sao ở đây họ lại dùng kiểu dữ liệu Byte ạ, em cảm ơn nhiều.

public BigInteger md(String f) throws Exception {
    BufferedInputStream file = new BufferedInputStream(new FileInputStream(f));
    MessageDigest md = MessageDigest.getInstance("SHA-1");
    DigestInputStream in = new DigestInputStream(file, md);
    int i;
    byte[] buffer = new byte[BUFFER_SIZE];
      System.out.println(buffer.length);
    do {
      i = in.read(buffer, 0, BUFFER_SIZE);
        System.out.println(i + " ");
    } while (i == BUFFER_SIZE);
    md = in.getMessageDigest();
    in.close();
    
    return new BigInteger(md.digest());
  }

Xem docs cho chắc. https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html

cái này em đọc qua rồi nhưng k hiểu, nên mới hỏi các bác về từng dòng code :((

HI Vu Hoan.
Bạn format lại code nhé. Còn tại sao lại dùng byte thì theo mình vì họ tạo một cái buffer.

dòng này ah
nếu dòng này thì mục đích là tăng tốc độ thực thi đọc file lên thôi, đọc theo block BUFFER_SIZE.
nếu BUFFER_SIZE la 4096 thì có nghĩa là read từng block 4kb.
Bình thườnng đọc theo từng bye sẽ chậm hơn.

1 Like

cảm ơn bác, nếu k có dòng đấy thì code vẫn bình thường đúng k bác ơi

ờ, bình thường nếu dùng FileInputStream thì nó sẽ như dưới


dùng BufferedInputStream thì sẽ như dưới:

ref: https://www.ntu.edu.sg/home/ehchua/programming/java/J5b_IO.html
chú đọc hết trong đường link chú sẽ rõ về basic input/output

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?