Thứ gì đó ở phía sau đầu tôi đang nói với tôi rằng tôi đang thiếu điều gì đó hiển nhiên ở đây.Thuật toán MessageDigest MD5 không trả lại những gì tôi mong đợi
Tôi đang tích hợp dự án java hiện có với api của bên thứ ba sử dụng băm md5 của khóa api để xác thực. Nó không làm việc cho tôi, và trong quá trình gỡ lỗi, tôi nhận ra rằng các băm tôi tạo ra không khớp với các ví dụ mà chúng đã cung cấp. Tôi đã tìm thấy một số trang web tạo ra băm MD5 từ chuỗi để kiểm tra các ví dụ của họ, và theo như tôi có thể nói tôi sai và họ đúng.
ví dụ: theo this website, chuỗi "hello" tạo ra một mã băm "5d41402abc4b2a76b9719d911017c592". (FWIW Tôi không biết gì về trang web này ngoại trừ việc nó có vẻ băm chính xác những ví dụ mà tôi có). Khi tôi chạy nó thông qua mã của tôi tôi nhận được:
XUFAKrxLKna5cZ2REBfFkg ==
Dưới đây là phương pháp đơn giản, tôi đang sử dụng để tạo ra md5 hash/chuỗi .:
private String md5(String md5Me) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
md.reset();
md.update(md5Me.getBytes("UTF-8"));
return Base64.encodeBase64String(md.digest());
}
tôi đã sử dụng rất phương pháp tương tự để xác thực thành công một API khác bằng thuật toán SHA1 tuần trước. Tôi tự hỏi nếu vấn đề có liên quan đến org.apache.commons.net.util.Base64.encodeBase64String ... Bất kỳ trợ giúp nào được đánh giá rất cao, nếu chỉ một số thử nghiệm để xem liệu byteArray có đúng hay không nhưng chuỗi được chuyển đổi sai .
md.digest() phải chứa byte bạn đang tìm kiếm, bạn mã hóa chúng hơn nữa bằng thuật toán Base64 và nhận kết quả khác nhau – hoaz
Tôi cần chuyển đổi các byte đó thành Chuỗi cho yêu cầu http, có cách nào tốt hơn để làm điều đó không ? – eric
new String (byte [] bytes) – Andy