Node.js的加密模块crypto之使用Cipher类加密数据
Cipher
类是Node.js的crypto模块的封装对象之一,与Hash
类和Hmac
类不同,Cipher
类不是计算数据哈希值及密钥,而对数据本身进行加密的。创建Cipher
类可以使用crypto模块的crypto.createCipher()
和crypto. createCipheriv()
两个方法。
Cipher
类是Node.js的crypto模块的封装对象之一,与Hash
类和Hmac
类不同,Cipher
类不是计算数据哈希值及密钥,而对数据本身进行加密的。创建Cipher
类可以使用crypto模块的crypto.createCipher()
和crypto. createCipheriv()
两个方法。
前文件介绍了Node.js的crypto模块中Cipher
类,Cipher
类用于对流数据进行加密的。在数据传输前对数据进行加密码可以保证数据传输的安全。对于加密码的数据,在收到加密码数据后,需要对数据进行解密。crypto模块中封将了Decipher
类,用于对Cipher
加密数据的解密。
在网络中传输的数据,除可使用Cipher
类进行数据加密外,还可以对数据生成数字签名,以防止在传输过程中对数据进行修改。在Node.js的crypto模块中,封装了用于生成数字签名的类Sign
及用于验证数字签名的类Verify
。
Diffie-Hellman
是一种建立密钥的方法,需要安全通信的双方可以用这个方法确定对称密钥,它所产生的密钥可用于加密、进一步的密钥管理或任何其它的加密方式。Node.js的crypto
模块,封装了Diffie-Hellman
类,可以用这个类来生成交换秘钥。
ECDH
是基于ECC(Elliptic Curve Cryptosystems,椭圆曲线密码体制,参看ECC)的Diffie-Hellma密钥交换算法。交换双方可以在不共享任何秘密的情况下协商出一个密钥。与Diffie-Hellman
相比ECDH具有ECC的高强度、短密钥长度、计算速度快等优点。Node.js的crypto模块,封装了ECDH
类,可以用这个类来生成EC Diffie-Hellman交换密钥。
前几天学习整理了Node.js的crypto
模块,crypto模块实现了OpenSSL中相关加密码技术,可以用于文件啥希值计算、加密、解密、验证等。最近要做APP升级功能,为了验证APP文件的完整性,需要在服务端计算文件的MD5值,APP升级时会对文件的MD5值进行较验。
OSI七层模型是不同计算机或通信系统间互联的标准体系和框架,在OSI中包括一系列标准和协议,如:TCP/IP、UDP、HTTP等,在Node.js中提供了对这些协议的实现和支持,如:net
模块提供了对TCP、Socket的封装和支持,dgram
模块提供了对UDP的封装和支持、http
模块进一步封装了TCP协议提供了对HTTP的支持。本文对网络中相关协议、概念及Node.js中对相关协议的实现模块做简单介绍,后续会有对具体介绍模块及其功能文章。
传输控制协议(Transmission Control Protocol,TCP)是Internet的基础协议之一,它位于IP协议之上,为应用层提供了一种可靠的传输机制,它基于三次握手协议建立连接。TCP是一种面向连接的协议,这意味着通信的两个终端之间需要建立专门的连接,该连接之间是双向的。Node.js中的net
模块提供了对TCP
协议的封装,使用net
模块可以轻松的构建一个TCP
服务器,或构建一个连接TCP
服务器的客户端。
net
模块可以创建TCP服务端,也可以创建TCP服务端客户端。创建一个TCP服务器,可以使用构造函数new net.Server()
或使用其工厂方法net.createServer
,这两种方法都会返回一个net.Server
类,net.Server
类继承了events
,所以它也是个事件发射器。
使用Node.js的net
模块可以很容易的构建一个TCP客户端,TCP客户端可以用来连接至TCP服务端。建立TCP连接后,两者之间会基于流进行数据交互,一个是接收数据的可读流,一个是发送数据的可写流。创建TCP客户端可以使用构造函数net.Socket()
或使用net. createConnection()
(net. connect()
)方法。