博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
前端加解密
阅读量:6272 次
发布时间:2019-06-22

本文共 2955 字,大约阅读时间需要 9 分钟。

一、 AES 加密与解密

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。是一种对称加密算法也就是加密和解密用相同的密钥;

1.1 使用 crypto-js 实现 AES 加密

1.1.1 参数说明

  • data 要加密的明文
  • key 秘钥
  • iv 偏移
  • mode 加密的模式
  • padding 填充

1.1.2 代码演示

const CryptoJS = require('crypto-js');const encrypt = (data) => {  const key = CryptoJS.enc.Latin1.parse('sd7JD8sKzc8MHdf8');  const iv = CryptoJS.enc.Latin1.parse('29JlOd8SCdk82CFd');  const encrypted = CryptoJS.AES.encrypt(    data,    key,    {      iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding    });  return `${encrypted}`;}复制代码

1.2 使用 实现 AES 解密

1.2.1 参数说明

  • data 要加密的明文
  • key 秘钥
  • iv 偏移
  • mode 加密的模式
  • padding 填充

1.2.2 代码演示

const decrypt = (data) => {  const key = CryptoJS.enc.Latin1.parse('sd7JD8sKzc8MHdf8');  const iv = CryptoJS.enc.Latin1.parse('29JlOd8SCdk82CFd');  decrypted='';  decrypted=CryptoJS.AES.decrypt(    data,    key,    {      iv : iv,      mode : CryptoJS.mode.CBC,      padding : CryptoJS.pad.ZeroPadding  });  return decrypted.toString(CryptoJS.enc.Utf8);}复制代码

二、 RSA 加密与解密

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。在使用 RSA 进行加密和解密时需要一对公钥和私钥,公钥一般存储在前端(前端使用公钥进行加密),而私钥一般存储与后端(后端使用私钥对密文进行解密);

3.1 公钥私钥的获取

  • Linux 下可直接通过终端命令来获取;
  • 通过在线网站生成: http://web.chacuo.net/netrsakeypair(选择合适的秘钥位数和格式);

3.2 jsencrypt 库实现 RSA 加密

import JSEncrypt from 'jsencrypt';const encrypted = (data) => {  var encrypt = new JSEncrypt();  const pubkey = `  -----BEGIN PUBLIC KEY-----  MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDpxv+yCAYuwXCSxLviAFyiy3V0  rvveRTbzt4KKASqzbwSJ4Kst73HFFka5GaI4nnQZQt4OzJUD3jNYKphE6WdDpSEJ  VuTbIzEoV0j9AS56gCF0YP8o8vTT3hQm2WtS+biG7sxJgDefdaWSaN6utwFZFfTh  RvBBeuOMIPb6X60lIwIDAQAB  -----END PUBLIC KEY-----`;  encrypt.setPublicKey(pubkey);  return encrypt.encrypt(data);}复制代码

3.3 jsencrypt 库实现 RSA 解密

import JSEncrypt from 'jsencrypt';const uncrypted = (encrypted) => {  var decrypt = new JSEncrypt();  const privkey = `  -----BEGIN PRIVATE KEY-----  MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOnG/7IIBi7BcJLE  u+IAXKLLdXSu+95FNvO3gooBKrNvBIngqy3vccUWRrkZojiedBlC3g7MlQPeM1gq  mETpZ0OlIQlW5NsjMShXSP0BLnqAIXRg/yjy9NPeFCbZa1L5uIbuzEmAN591pZJo  3q63AVkV9OFG8EF644wg9vpfrSUjAgMBAAECgYAbuTnBhyoUiWQsQ6B0YM6bj71S  JR5Bcbvekzir3Q+PT+8d2sLyI58+XDHu6ZdPV5s1E7T51FEnsEYugn6kTXmtVfP/  rg46H8t8iMkHZ99APeyeDw7xuvuTMZTU+7LO+kwdjjQazIcUd9UhBmBJkZXOJmG5  HG6TuFjuYHELn0xQwQJBAPiJ5FCH9h1rhxYMtyE7octuRH/bB7235UGXfgcMcitF  SXmwFCyyXh5pYUxAjV0BVWYTbvqnDoZbQjXMMYiWUokCQQDwy6k9Pe0f8C0Jtw/1  Etv2BaqN1sN3d8E/3MGTANlCjmLuZuFgolcdvMGp0NuXayPUP8y+Ie5YpQ2pTwPa  6X9LAkAv1TIIwbH/RYORHc9c6QIhic5LIRdjTvIjZomNx7ptU39pmRa453cvuS5N  o5rRTIFoDNNuEBq+hu++NNdPp0apAkBuUzGwYI4jgvxvphNGmyRyvTfektauBw1g  wDlkrA/fAbPsPPDoQJkfg9tLfekOoEUjOzQIrS0yKjVvLEe85hyvAkEArluaKhJc  gd+ptsqbAnbQClxhnRYP+OjCM89X+hE24iPDmGMjAZ2mCbl8Px8wGZ9HAbwyo6k9  IanXW1Ad0NJlGw==  -----END PRIVATE KEY-----`;  decrypt.setPrivateKey(privkey);  return decrypt.decrypt(encrypted);}复制代码

3.4 补充说明:

  • RSA 加密后的密文为 base64 格式;
  • 在公钥秘钥的存储中最好严格保留秘钥的换行符;
  • 在需要设置秘钥位数和格式的情况下请确保秘钥位数和格式的统一;

转载地址:http://kqlpa.baihongyu.com/

你可能感兴趣的文章
VMware PowerCli批量实现虚拟机快照备份
查看>>
小程聊微服务-基于dubbo的mock测试系统
查看>>
在阿里云服务器使用scrapyd部署scrapy项目
查看>>
业界 | 从观望者到变革者:给新媒体的AI解决方案
查看>>
利用 CSS 变量实现令人震惊的悬浮效果
查看>>
爬虫入门之handler与opener(三)
查看>>
Linux Kernel 5.2 将进一步支持 AMD FreeSync
查看>>
Java CompletableFuture:thenCompose (3)
查看>>
Node.js编程之异步
查看>>
亦策软件与Qlik联合参加第六届大数据世界论坛
查看>>
RecyclerView进阶
查看>>
Java8学习(4)-Stream流
查看>>
SVG Path路径在网页开发的作用
查看>>
Android MPAndroidChart:动态添加统计数据线【8】
查看>>
第五届全球游戏开发者大会暨天府奖盛典18日盛大开幕
查看>>
融了1000万,只为让它们好好吃饭!
查看>>
Debian 项目领导人职位已有三位侯选者
查看>>
阿里巴巴与三个知名车企达成合作,将为其“AI+车”解决方案
查看>>
django小项目:搭建简易火车车票预订系统
查看>>
仅研发就投入3300人 华为如何掘金物联网?
查看>>