2015-12-07 80 views
0

我得到任意兩個:我的加密哈希是如何在兩個哈希之間跳躍的?

  • body ==> ef41c6e9a687de63acba3cd120737f18
  • body ==> 3f952f0ca3875f634206563187bcd06d

這怎麼可能?我用sha1試過並得到相同的結果(兩個diff散列)。

var request = require("request") 
, crypto = require("crypto") 
; 

module.exports.run = function (event, context, cb) { 
    return action(event, context, cb); 
}; 

var action = function (event, context, cb) {  
    var invalid = "url of image that about 50x50"; 
    request.get(invalid, function (error, response, body) { 
     if (!error && response.statusCode == 200) { 
      checksum(body); 
     } 
    }); 

    return cb(null, event); 
}; 

function checksum (str) { 
    console.log("body ==> ", crypto 
     .createHash('md5') 
     .update(str, 'utf8') 
     .digest('hex') 
    ); 
} 
+2

這可能是因爲你得到兩個不同的答案。將它們寫入一個文件並進行區分以查看它們的不同之處。 –

+0

尚未下載文件。但從我看到的情況來看,5-6要求它從「3f9 ...」變爲「ef4 ...」,然後回到「3f9 ...」。我會嘗試。 – iCodeLikeImDrunk

回答

1

如果您正在下載這樣的二進制數據,你應該知道,在默認情況下request將轉換爲(UTF8)字符串的響應。因此,在轉換過程中,圖像數據可能會變得越來越嚴重。

要解決該特定問題,可以強制request將響應保留爲Buffer,方法是在請求配置中明確設置encoding: null。例如:

request.get({ 
    url: invalid, 
    encoding: null 
}, function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
    checksum(body); 
    } 
}); 

// ... 

function checksum(buf) { 
    console.log("body ==> ", crypto 
    .createHash('md5') 
    .update(buf) 
    .digest('hex') 
); 
} 
+0

嗯,似乎是這種情況。在我將編碼設置爲null之前,我會在每個5-6個請求中獲得diff散列。現在已經消失了。謝謝! – iCodeLikeImDrunk