- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
JavaScript利用crypto模块实现加解密
目录一、散列(哈希)算法1、如何获取所有的散列算法2、使用方法3、散列算法例子4、多次update二、HMac算法三、对称AES加密1、如何加密2、如何解密
一、散列(哈希)算法
散列函数(英语:Hashfunction)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字指纹的方法。基本原理是将任意长度数据输入,最后输出固定长度的结果。
hash算法具有以下特点:相同的输入会产生相同的输出不同的输出会产生不同的输出任意的输入长度输出长度是相同的不能从输出推算出输入的值正因为hash算法的这些特点,因此hash算法主要用于:加密、数据检验、版本标识、负载均衡、分布式(一致性hash)。
1、如何获取所有的散列算法
console.log(crypto.getHashes());
2、使用方法
crypto.createHash(algorithm);//创建HASH对象
hash.update(data,[input_encoding]);//增加要添加摘要的数据,摘要输出前可以使用多次update
hash.digest([encoding]);//输出摘要内容,输出后则不能再添加摘要内容
3、散列算法例子
constcrypto=require(crypto);
constmd5=crypto.createHash(md5);//返回哈希算法
constmd5Sum=md5.update(helloworld);//指定要摘要的原始内容,可以在摘要被输出之前使用多次update方法来添加摘要内容
constresult=md5Sum.digest(hex);//摘要输出,在使用digest方法之后不能再向hash对象追加摘要内容。
console.log(result);
4、多次update
varfs=require(fs);
varshasum=crypto.createHash(sha1);//返回sha1哈希算法
varrs=fs.createReadStream(./readme.txt);
rs.on(data,function(data){
shasum.update(data);//指定要摘要的原始内容,可以在摘要被输出之前使用多次update方法来添加摘要内容
rs.on(end,function(){
varresult=shasum.digest(hex);//摘要输出,在使用digest方法之后不能再向hash对象追加摘要内容。
console.log(result);
二、HMac算法
hash算法也被称为摘要算法,该算法可以将任意长度的数据,转换为固定长度的hash值,这种方式具有不可逆性。你可以把一本小说转换为hash数据,但无法从这hash数据再逆转回一本小说。因此,若要获取hash的原数据,只能靠字典碰撞。
该算法通常在文本校验、存储密码时用的比较多。虽然摘要算法会用于密码的存储,但严格来说,摘要算法不算做是加密算法。一下是用hash进行加密的例子
constcrypto=require(crypto);
functionencryptData(data,key,algorithm){
if(!crypto.getHashes().includes(algorithm)){
thrownewError(不支持此哈希函数);
consthmac=crypto.createHmac(algorithm,key);
hmac.update(data);
returnhmac.digest(hex);
//output:30267bcf2a476abaa9b9a87dd39a1f8d6906d1180451abdcb8145b384b9f76a5
console.log(encryptData(root,7(23y*745^%I,sha256));
三、对称AES加密
查看nodejs支持的所有加密算法:
crypto.getCiphers();
Nodejs提供了Cipher类和Decipher类,分别用于加密和解密。两者都继承TransfromStream,API的使用方法和哈希函数的API使用方法类似。
1、如何加密
1、第一种方法
//aes加密
encrypt(word){
文档评论(0)