CryptoJS 加密
CryptoTS不太完善 建议使用CryptoJS
typescript版 请安装 yarn add @type/crypoto-js
AES区块加密标准算法,
三种常见方案:
AES-128,AES-192,AES-256 区别在于密钥的长度不同
AES-128长度为16bytes(128bit/8);
AES-192长度为24bytes(192bit/8);
AES-256长度为32bytes(256bit/8);
密钥越长,安全强度越高,但伴随运算轮数的增加,带来的运算开销就会更大,所以用户应根据不同应用场合进行合理选择。
五种加密模式:CBC、ECB、CTR、OCF、CFB
其中较为常用的为CBC,ECB;
CBC模式: 密码分组链接模式.先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密
ECB模式:即电码本模式.将整个明文分成若干段相同的小段,然后对每一小段进行加密。
了解更多可以参考图文:https://www.jianshu.com/p/79a225c2650e
在应用AES算法对线路传输数据加密过程中,若想保证密文的整体变化,要保证每块明文数据都是变化的
参考:http://www.elecfans.com/d/536259.html
加密中间件
async (ctx,next)=>{}
ctx.request是context经过封装的请求对象,ctx.req是context提供的node.js原生HTTP请求对象,同理ctx.response是context经过封装的响应对象,ctx.res是context提供的node.js原生HTTP响应对象。
ctx.state相当于一个全局变量,在各个中间件间传递
await next(); //成功后,遍历下一个中间件,异步处理,本身async函数也是一个promise对象,故使用await有效
import { extend, ResponseError, OnionMiddleware } from 'umi-request';
const _cipherHandlerMiddleware: OnionMiddleware = async (ctx, next) => {
ctx.req.options.data = aes192CBCEncrypt(ctx.req.options.data);
await next();
ctx.res = aes192CBCDecrypt(ctx.res);
}
umi-request的配置文件中给出了中间件的类型
export type OnionMiddleware = (ctx: Context, next: () => void) => void;
export interface Context {
req: {
url: string;
options: RequestOptionsInit;
};
res: any;
}
参考案例:https://blog.csdn.net/its_my_dream/article/details/53041666
CryptoJS 加密 ==> CryptoTS.ɵo == CryptoJS.enc.Latin1=> .ɵo为配置文件中Latin1的别名;
var key = CryptoJS.enc.Latin1.parse('1234567887654321'); //为了避免补位,直接用16位的秘钥
var iv = CryptoJS.enc.Latin1.parse('1234567887654321'); //16位初始向量
adding: CryptoJS.pad.ZeroPadding == padding: CryptoTS.pad.NoPadding//不够16位的情况补0至16位。