如何使用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; })
randbytes
asynchronous工作。 如果你想把它和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 /'