我目前使用以下设置来注册新用户:
// creates a new user
app.post('/users', function(req, res) {
// create new user
var user = new User();
// assign post
user.username = req.body.username;
user.email = req.body.email;
crypto.randomBytes(32, function(err, buf) {
if (err) throw err;
user.salt = buf.toString('hex');
crypto.pbkdf2(req.body.password, user.salt, 25000, 512, function(err, encodedPassword) {
if (err) throw err;
user.password = (encodedPassword.toString('hex')); // this line
user.save(function(err, user) {
if (!err) return res.send(err, 500);
return res.json(user);
});
}.bind(this));
});
});
Run Code Online (Sandbox Code Playgroud)
仔细看看这一行:
user.password = (encodedPassword.toString('hex'));
Run Code Online (Sandbox Code Playgroud)
这应该将密码字符串(看起来像二进制字符串)编码为十六进制字符串.出于某种原因,这不起作用.
为什么不?
Byside:盐和密码存储的推荐编码是什么(十六进制,二进制,base64)?
我不是100%肯定,但是从我通过websocket发送blob(二进制数据)时看到的内容来看,该blob不包含任何文件信息。(此外,官方规范指出,wesockets仅发送原始二进制文件)
我正在使用https://github.com/websockets/ws
测试:
直接从输入文件发送Blob。
ws.send(this.files[0]) //this should already contain the info
Run Code Online (Sandbox Code Playgroud)
通过设置适当的mimetype文件,使用本地javascript api创建一个新的blob。
ws.send(new Blob([this.files[0]],{type:this.files[0].type})); //also this
Run Code Online (Sandbox Code Playgroud)
双方都只能获得有效的斑点,而没有任何其他信息。
是否有可能追加一个4kb的预定义json数据,该数据也转换为包含mimetype和filesize等重要信息的二进制文件,然后在需要时将其拆分为4kb?
{“ mime”:“ txt /纯文本”,“大小”:345} ____________ 4KB_REST_OF_THE_BINARY
要么
ws.send({"mime":"txt\/plain","size":345})
ws.send(this.files[0])
Run Code Online (Sandbox Code Playgroud)
即使第一个是最糟糕的解决方案,它也可以让我一次发送所有内容。
第二个有一个大问题:
这是一个聊天记录,允许同时发送文档,图像,音乐视频等文件。
在发送二进制数据之前,我可以在发送文件/用户信息时编写某种握手系统。
但
如果另一个人也发送了一个文件,因为它是异步的,则握手系统没有机会确定该文件对于正确的用户和模仿类型是正确的。
那么,如何在多用户异步环境中正确发送二进制文件?
我知道我可以转换为base64,但那要大30%。
顺便说一句 完全让Apple感到失望 ...虽然chrome可以正确显示每个二进制数据,但我的ios设备无法处理blob,只有图像将以blob或base64格式显示,甚至没有简单的txt文件。基本上只有<img>标签可以读取动态文件。
一切运作方式(现在):
编辑
我现在所拥有的:
客户端1(发送文件)
fileInput.addEventListener('change',function(e){
var file=this.files[0];
ws.send(new Blob([file],{
type:file.type //<- SET MIMETYPE
}));
//file.size
},false);
Run Code Online (Sandbox Code Playgroud)
注意:file已经是blob了……但是,这通常是您创建指定mimetype的新blob的方式。
服务器(将二进制数据广播到其他客户端)
aaaaa和mimetype消失了...
ws.addListener('message',function(binary){
var b=0,c=wss.clients.length;
while(b<c){
wss.clients[b++].send(binary) …Run Code Online (Sandbox Code Playgroud) 呼叫的 responseText 充满了替换 unicode 字符 (U+FFFD) ?。我无法将 responseType 设置为 arraybuffer。 可以将 responseType 设置为“arraybuffer”的答案
有没有办法恢复已转换为字符串的原始二进制文件(原始数据)?
console.log(xhr.responseText); // 'at?'
console.log(xhr.responseText.codePointAt(0)); // '97'
console.log(xhr.responseText.codePointAt(1)); // '116'
console.log(xhr.responseText.codePointAt(2)); // '65533'
Run Code Online (Sandbox Code Playgroud)
1) Javascript 将数据转换为 String 时数据会丢失吗?
或者
2)数据作为字符串是否安全,但我还没有找到将其解码为二进制/十六进制/十进制的正确方法?(在那种情况下,数据很好,但在打印时它只显示替换字符。)
我有一些荷兰语的字符串。我知道如何使用 PHP 对它们进行编码
$str = iconv( "Windows-1252", "UTF-8", $str );
Run Code Online (Sandbox Code Playgroud)
Javascript 中的等价物是什么?
我正在尝试在 Javascript 中使用 HMAC SHA-256 散列文本我有 [secret Ket]
我有 Ruby 代码要散列,但我需要 Javascript 代码来散列文本
红宝石代码
OpenSSL::HMAC.hexdigest(
'sha256', # hash function
'HFgGgIOaLiyFgUhIjirOoqxloHuiLNr20jkhXrNw', # secret key (keep safe!)
current_user.email # user's email address
)
Run Code Online (Sandbox Code Playgroud)
请建议我任何解决方案。
标题说明了一切.我有一个jquery序列化数据,如下所示:
tarid=value&tarname=value&sel=3
Run Code Online (Sandbox Code Playgroud)
我想将它转换为ArrayBuffer.之后,我还需要再次将其恢复原状.那我该怎么办呢?
我的公司使用一个propitiatory应用服务器,其中服务器端程序是用javascript(而不是node.js)编写的.这是一个非常初始的事情,支持并不是那么好
现在这是我的问题:
我不得不在服务器端处理上传的csv ..我正在使用超级答案我如何异步上传文件?(使用jquery传递formdata对象),我可以访问服务器端发送的文件.但是我该怎么解析呢?
看起来像这样
------WebKitFormBoundaryU5rJUDxGnj15hIGW Content-Disposition: form-data; name="fileToUpload"; filename="test.csv" Content-Type: application/vnd.ms-excel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ------WebKitFormBoundaryU5rJUDxGnj15hIGW--
我真的很困惑如何在服务器端使用普通的javascript处理这个文件.
请帮忙.
我在node.js上编写了一个简单的TCP服务器,将一些数据发送到Chrome应用程序.在chrome应用程序中,当我获取数据时,我使用下面的函数将其转换为字符串,我得到一个异常" Uint16Array的字节长度应该是2的倍数 "
String.fromCharCode.apply(null, new Uint16Array(buffer))
Run Code Online (Sandbox Code Playgroud)
我找不到任何可能导致此问题以及如何解决此问题的信息.任何关于此的指示都非常感谢.
以下是node.js服务器中用于将数据发送到客户端的代码:
socket.on('data', function(data) {
console.log('DATA ' + socket.remoteAddress + ': ' + data);
// Write the data back to the socket,
// the client will receive it as data from the server
var r= socket.write('from server\r\n');
});
Run Code Online (Sandbox Code Playgroud)
以下是chrome app的代码:
chrome.sockets.tcp.onReceive.addListener(function (info) {
console.log('onListener registered');
if (info.socketId != socketid)
return;
else {
try {
data = ab2str(info.data);
console.log(data);
}
catch (e) {
console.log(e);
}
}
// info.data is an arrayBuffer.
});
function ab2str(buf) { …Run Code Online (Sandbox Code Playgroud) 服务器(水晶)
require "http"
module Network
class WebSocket < HTTP::WebSocketHandler
HANDLERS = [] of HTTP::Handler
def initialize (@path : String, &@proc : HTTP::WebSocket, HTTP::Server::Context -> Nil)
HANDLERS << self
end
def self.run (host : String = "::", port : Int32 = 3030)
puts "Run server on ws://[#{host}]:#{port}"
HTTP::Server.new(host, port, HANDLERS).listen
end
end
end
Network::WebSocket.new "/" do |socket|
socket.send("Hello From Binary!".to_slice)
end
Network::WebSocket.run
Run Code Online (Sandbox Code Playgroud)
客户端(JavaScript的)
ws = new WebSocket("ws://[2a01:4f8:xx:xx::xx]:3030/")
ws.onmessage = (message) => {
console.log(message.data)
}
Run Code Online (Sandbox Code Playgroud)
Console.log向我展示了字节长度且没有任何有效负载的ArrayBuffer(13).
但!Python客户端(https://github.com/websocket-client/websocket-client)工作正常.
from websocket import …Run Code Online (Sandbox Code Playgroud) 所述的ByteArray类提供的方法和属性来优化读,写,和处理二进制数据.
如何使用字节数组教程.
我正在寻找一个非常相似的API作为链接的API.
我正在寻找一个浏览器提供的类,而不是黑客或解决方法.链接的问题没有提供答案.如果是,请提供文档的链接.
有人与另一个问题有关,但没有回答我的问题.
更新:有人在列表中向我指出了这个类:
https://gist.github.com/sunetos/275610#file-bytearray-js
它具有大部分或全部读取方法,但没有一种写入方法,并且它不是浏览器的本机.
javascript ×10
node.js ×3
arraybuffer ×2
encoding ×2
websocket ×2
arrays ×1
binary ×1
blob ×1
bytearray ×1
cryptography ×1
crystal-lang ×1
form-data ×1
typed-arrays ×1
unicode ×1