CryptoJS 加密

    技术2023-04-17  99

    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位。

    Processed: 0.010, SQL: 9