[TOC]
### crypto 加密实例代码
```
"use strict";
//引用crypto模块
const crypto = require("crypto");
//-------------MD5 可以任意多次调用update(),update()默认字符串编码是UTF-8
const hash = crypto.createHash("md5");
hash.update("hello, world!");
console.log(hash.digest("hex"));
//--------------SHA1
const sha1 = crypto.createHash("sha1");
sha1.update("hello,world!");
console.log(sha1.digest("hex"));
//-------------SHA256
const sha256 = crypto.createHash("sha256");
sha256.update("hello,world!");
console.log(sha256.digest("hex"));
//------------SHA512
const sha512 = crypto.createHash("sha512");
sha512.update("hello,world!");
console.log(sha512.digest("hex"));
//------------Hmac
const hmac = crypto.createHash("sha256","secret-key");
hmac.update("hello world!");
console.log(hmac.digest("hex"));
//-----------AES
function aesEncrypt(data, key) {
const cipher = crypto.createCipher("aes192", key);
var crypted = cipher.update(data, "utf8", "hex");
crypted += cipher.final("hex");
return crypted;
}
function aesDecrypt(encrypted, key) {
const decipher = crypto.createDecipher("aes192", key);
var decrypted = decipher.update(encrypted, "hex", "utf8");
decrypted += decipher.final("utf8");
return decrypted;
}
var data = "hello this a secret message!";
var key = "password";
var encrypted = aesEncrypt(data,key);
var decrypted = aesDecrypt(encrypted, key);
console.log("plain text:" + data);
console.log("Encrypted text:" +encrypted);
console.log(("Decrypted text:" + decrypted));
//------------------diffie-hellman
var ming = crypto.createDiffieHellman(512);
var ming_keys = ming.generateKeys();
var prime = ming.getPrime();
var generator = ming.getGenerator();
console.log("Prime:" + prime.toString("hex"));
console.log("Generator:" + generator.toString("hex") );
var hong = crypto.createDiffieHellman(prime, generator);
var hong_keys = hong.generateKeys();
var ming_secret = ming.computeSecret(hong_keys);
var hong_secret = hong.computeSecret(ming_keys);
console.log("Secret of xiao ming:" + ming_secret.toString("hex"));
console.log("Secret of xiao hong:" + hong_secret.toString("hex"));
//----------RSA
const fs = require("fs");
//从文件加载key
function loadKey(file) {
return fs.readFileSync(file,"utf8");
};
let prvKey = loadKey("./rsa-prv.pem");
let pubKey = loadKey("./rsa-pub.pem");
let message = "hello world!";
//使用私钥加密公钥解密
let enc_by_prv = crypto.privateEncrypt(prvKey,Buffer.from(message,"utf8"));
console.log("encrypted by private key:" + enc_by_prv.toString("hex"));
let dec_by_pub = crypto.publicDecrypt(pubKey, enc_by_prv);
console.log("decrypted by public key:" + dec_by_pub.toString("utf8"));
//使用公钥进行加密私钥解密
let enc_by_pub = crypto.publicEncrypt(pubKey,Buffer.from(message,"utf8"));
console.log("encrypted by public key:" + enc_by_pub.toString("hex"));
let dec_by_prv = crypto.privateDecrypt(prvKey,enc_by_pub);
console.log("decrypted by private key:" + dec_by_prv.toString("utf8"));
```
- 概述
- 起步
- 跨域配置
- 路径别名
- 路由
- api版本控制
- 错误和异常
- 全局异常处理
- 数据库
- 创建迁移文件
- sequelize数据类型
- 配置
- 新增
- 查询
- 条件查询
- 模糊查询
- 排序查询
- 聚合查询
- 分组查询
- 分页查询
- 修改
- 删除
- 获取器
- 修改器
- 静态属性
- 字段验证
- 外键约束
- 关联模型
- 一对一
- 一对多
- 左外连接
- 多对多
- 字段显示隐藏
- 事务
- 字段自增
- 验证层
- egg-validate
- indicative验证器
- egg-validate-plus
- betterValidate
- 校验规则
- 中间件
- 安全
- 数据加密
- 单向加密
- 示例代码
- 封装egg加密
- 上传
- path模块
- 单文件上传
- 多文件上传
- 按照日期存储
- 工具函数
- egg常用工具函数
- 缓存
- 配置缓存插件
- 设置缓存
- 获取缓存
- 删除缓存
- 消息队列
- rabbitMQ
- 安装
- 简单队列
- 工作队列
- 工作队列(dispach分发)
- 消息应答和持久化
- redis
- 数据类型
- 字符串类型(String)
- 哈希类型(Hash)
- 列表(List)
- 无序集合(Set)
- 可排序集合(Zset)
- 邮件系统
- nodeMailer
- 第三方模块
- 生成随机数
- JWT
- JWT鉴权
- 生成Token
- 短信服务
- 阿里大鱼短信验证码
- 发送短信逻辑
- 阿里短信Node类