如何使用Node.js将字节数组转换为string?

我需要一个随机的字节序列来做密码哈希。 在Ruby中,这看起来像:

File.open("/dev/urandom").read(20).each_byte{|x| rand << sprintf("%02x",x)} 

在Node.js中,我可以得到一个随机字节序列:

  var randomSource = RandBytes.urandom.getInstance(); var bytes = randomSource.getRandomBytesAsync(20); 

但问题是,如何将这些转换为一个string?

另外,我需要让他们包装在promisses。 这将工作:

  get_rand() .then(function(bytes) { authToken = bytes; }) 

randbytesasynchronous工作。 如果你想把它和promises结合起来,你还需要使用一个Promises-lib。 我使用when作为一个例子:

 var when = require('when'); var RandBytes = require('randbytes'); var randomSource = RandBytes.urandom.getInstance(); function get_rand() { var dfd = when.defer(); randomSource.getRandomBytes(20, function(bytes) { dfd.resolve( bytes.toString('hex') ); // convert to hex string }); return dfd.promise; } // example call: get_rand().then(function(bytes) { console.log('random byte string:', bytes); }); 

尝试这个:

 new Buffer(bytes).toString('ascii'); 

更多细节在这里: http : //nodejs.org/api/buffer.html

你可以使用节点附带的encryption:

 var Promise = require("bluebird"); var crypto = Promise.promisifyAll(require("crypto")); crypto.randomBytesAsync(20).then(function(bytes){ console.log('random byte string:', bytes.toString("hex")); }); 

日志:

 random byte string: 39efc98a75c87fd8d5172bbb1f291de1c6064849 

你想把它转换成ASCII码吗? 如果没有,这是我的代码(1分钟的工作):

  var z; randomSource.getRandomBytes(20, function(){z=arguments[0]}) z <Buffer c8 64 03 d1 2d 27 7d 8e 8f 14 ec 48 e2 97 46 84 5a d7 c7 2f> String(z) ' d\u0003 -\'}  \u0014 H  F Z  /'