01/10/2018, 10:00

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());
  }
rogp10 viết 12:14 ngày 01/10/2018

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

Vu Hoan viết 12:15 ngày 01/10/2018

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 :((

Tao Không Ngu. viết 12:02 ngày 01/10/2018

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.

Nguyen Ca viết 12:16 ngày 01/10/2018

byte[] buffer = new byte[BUFFER_SIZE];

i = in.read(buffer, 0, BUFFER_SIZE);

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.

Vu Hoan viết 12:09 ngày 01/10/2018

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

Nguyen Ca viết 12:02 ngày 01/10/2018

ờ, 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

Bài liên quan
0