使用Socket传输密码时数据是否自动加密?是否需要自行实现加密算法?
问题解答
- 基础结论:包括Socket.io常用的WebSocket在内的普通Socket协议本身没有内置自动加解密能力,默认都是明文传输,链路中间的节点可以直接抓包获取你通过
socket.emit()发送的所有数据,包含密码等敏感信息。 - 不推荐你自行实现RSA加解密作为唯一的传输安全方案:
- 优先使用工业界标准化的传输层加密方案:如果是WebSocket场景,直接给你的Socket服务配置合法的SSL证书,改用
wss://协议建立连接即可。TLS/SSL层会自动完成全链路的传输加解密,安全强度经过全球范围的长期验证,远高于个人自行实现的加密逻辑,也不需要你额外开发加解密相关代码。 - 如果你确实有应用层二次加密的特殊需求(比如合规要求、金融级安全场景),也不要直接用RSA加密传输内容:RSA对加密内容长度有限制,且加解密计算效率极低,标准做法是RSA+对称加密混合方案:客户端随机生成AES密钥,用服务端公钥加密这个AES密钥后发送给服务端,后续所有传输内容都用该AES密钥做对称加解密,服务端用私钥解密拿到AES密钥后再解密内容即可。
- 优先使用工业界标准化的传输层加密方案:如果是WebSocket场景,直接给你的Socket服务配置合法的SSL证书,改用
- 补充注意:你已经实现的密码加盐哈希是存储层面的安全措施,无法替代传输加密的作用:哪怕你服务端收到密码后会做加盐哈希再落库,只要传输过程中密码是明文传递的,一旦被截获就会直接泄露用户的明文密码,传输加密是必须配置的环节。
内容的提问来源于stack exchange,提问作者Samrud
相关产品推荐
相关产品推荐

