base64加密解密

这篇具有很好参考价值的文章主要介绍了base64加密解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

base64加密解密过程

Base64会使用一串固定编码: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

  • 加密过程

想要使用Base64加密,原文长度必须是3的倍数。如果原文不是3的倍数就填充其他符号来凑足成3的倍数;

  • 1,将明文对照以ACSSI码表转换成一个8位二进制数;
  • 2,将转换后的数据每次取出六位依次取出转换成十进制;
  • 3,将转换出来的十进制数对照Base64对应表转换成字符;(Base64对应表可搜索)
  • 解密过程:
    • 1,将密文按照对照表获得十进制数;
    • 2,将十进制转换成二进制取低六位整合在一起;
    • 3,将转换出来的二进制数依次取8位进行解密;

base64加密解密实现

主要是对字符串的处理,所以对字符串相关的方法和属性一定要熟练;

javascript原生方法
  • 方法:

    • atob():解码一个Base64字符串;
    • btoa():从一个字符串或者二进制数据编码一个Base64字符串;
  • 使用文章来源地址https://www.toymoban.com/news/detail-444790.html

    • 默认转换ASCII字母和数字,不支持中文;
    let encodeRes = btoa("hello")
    let decodeRes = atob(encodeRes)
    
    • 转换中文的方法
    //中文转URL再转为Base64
    let encodeRes = btoa(encodeURIComponent("你好"))
    //解码先解为URL,再转成中文
    let decodeRes = decodeURIComponent(atob(encodeRes))
    
手写封装
  • 封装:我们假设在项目中要使用这个功能,自己封装函数并导出;
//在封装公共方法的文件夹下新建base.js文件
//我习惯写类(函数也可以)
export class Base64{

  constructor() {

    //固定编码

    this.keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

  }

  //加密

  encode(str) {

    //先将字符串UTF-8编码

    str = this._utf8_encode(str)

    let res = ""

    let i = 0

    let char1, char2, char3, enc1, enc2, enc3, enc4;

    while (i < str.length) {

      char1 = str.charCodeAt(i++);

      char2 = str.charCodeAt(i++);

      char3 = str.charCodeAt(i++);

      enc1 = char1 >> 2;

      enc2 = ((char1 & 3) << 4) | (char2 >> 4);

      enc3 = ((char2 & 15) << 2) | (char3 >> 6);

      enc4 = char3 & 63;

      if (isNaN(char2)) {

        enc3 = enc4 = 64;

      } else if (isNaN(char3)) {

        enc4 = 64;

      }

      res = res +

        this.keyStr.charAt(enc1) + this.keyStr.charAt(enc2) +

        this.keyStr.charAt(enc3) + this.keyStr.charAt(enc4);

    }

    return res;

  }

  //解密

  decode(str) {

    str = str.replace(/[^A-Za-z0-9\+\/\=]/g, "");

    let res = ""

    let i = 0

    let char1, char2, char3, enc1, enc2, enc3, enc4;

    while (i < str.length) {

      enc1 = this.keyStr.indexOf(str.charAt(i++));

      enc2 = this.keyStr.indexOf(str.charAt(i++));

      enc3 = this.keyStr.indexOf(str.charAt(i++));

      enc4 = this.keyStr.indexOf(str.charAt(i++));

      char1 = (enc1 << 2) | (enc2 >> 4);

      char2 = ((enc2 & 15) << 4) | (enc3 >> 2);

      char3 = ((enc3 & 3) << 6) | enc4;

      res = res + String.fromCharCode(char1);

      if (enc3 != 64) {

        res = res + String.fromCharCode(char2);

      }

      if (enc4 != 64) {

        res = res + String.fromCharCode(char3);

      }

    }

    //最后将字符串UTF-8解码

    res = this._utf8_decode(res)

    return res;

  }

  //UTF-8编码

  _utf8_encode(str) {

    //回车换行符替换为换行符

    str = str.replace(/\r\n/g, "\n")

    //加密后的返回结果是一个字符串

    let res = ""

    for (let i = 0; i < str.length; i++){

      //字符串方法 charCodeAt() 用于检索字符串中特定位置的字符的Unicode值,返回一个UTF-16值(一个介于 0-65535之间的16位整数;

      //字符串方法fromCharCode() 用于从给定的Unicode获取字符;

      //位运算

      // >> :(左移)各二进位全部左移若干位,高位丢弃,低位补0;

      // & :(与)两个位都为1时,结果才为1;

      // | :(或)两个位都为0时,结果才为0;

      let char = string.charCodeAt(i);

      switch (char) {

        case char < 128:

          res += String.fromCharCode(char)

          break;

        case ((char > 127) && (char <2048)) :

          res += String.fromCharCode((char >> 6) | 192)

          res += String.fromCharCode((char & 63) | 128)

          break;

        default:

          res += String.fromCharCode((char >> 12) | 224)

          res += String.fromCharCode(((char >> 6) & 63) | 128)

          res += String.fromCharCode((char & 63) | 128)

          break;

      }

    }

    return res

  }

  //UTF-8解码

  _utf8_decode(str) {

    //解密后的返回结果是一个字符串

    let res = ""

    let i = 0;

    let char = 0;

    let char1 = 0;

    let char2 = 0;

    while (i < str.length) {

      char = str.charCodeAt(i);

      switch (char) {

        case char < 128:

          res += String.fromCharCode(char);

          i++;

          break;

        case  ((char > 191) && (char < 224)):

          char1 = str.charCodeAt(i + 1);

          res += String.fromCharCode(((char & 31) << 6) | (char1 & 63));

          i += 2;

          break;

        default:

          char1 = str.charCodeAt(i + 1);

          char2 = str.charCodeAt(i + 2);

          res += String.fromCharCode(((char & 15) << 12) | ((char1 & 63) << 6) | (char2 & 63));

          i += 3;

          break;

      }

    }

    return res

  }

}

  • 使用:
//在使用的地方引入
import { Base64 } from '../../utils/base.js'
//使用
let str = '是你好不是hello'
let base64 = new Base64()
let encodeRes = base64.encode(str);
let decodeRes = base64.decode(encodeRes);

到了这里,关于base64加密解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java和js实现前端加密后端解密,后端加密前端解密(Base64)

    目录 1.前端加密后端解密 2.后端加密前端解密 在前端和后端数据传输时,常常涉及到隐私数据的传输(例如用户名和密码),这时,我们就需要对隐私数据进行加密解密 1.前端加密后端解密         1.1 前端jquery实现         1.2后端 2.后端加密前端解密         2.1后端加密

    2024年02月16日
    浏览(56)
  • JS基于base64编码加密解密文本和图片(修订)

    ​ 密码学,体系太庞大了,常见的加密解密算法很多,这里仅介绍采用base64实现的加密解密的方法。 严格地说base64不是加密算法,他只是一种编码方式,是一种用64个字符来表示任意二进制数据的方法。详情可参见其它资料。 Base64编码具有不可读性,需要解码后才能阅读。

    2024年02月07日
    浏览(50)
  • Base64加密解密,【微信小程序】,最新Android面试合集

    import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import tsou.com.encryption.R; import tsou.com.encryption.base64.Base64Utils; /** 一、什么Base64算法? Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一, Base64并不是安全

    2024年03月24日
    浏览(46)
  • uniapp开发微信小程序使用base64进行加密解密

    涉及场景:uniapp开发微信小程序需要使用base64进行加解密。 涉及依赖包:base-64,utf8 涉及到问题描述:首先尝试引入js-base64这个包,经过尝试后发现无法使用,为什么无法使用不晓得,没研究出来。再搜索中找到一篇关于《uniapp使用base64》的文章,文章中使用base64这个包,经

    2024年02月16日
    浏览(55)
  • 使用base64加密解密的多种方法:包含pc端和微信小程序

    1、pc端 Window 对象 Window 对象表示浏览器中打开的窗口。 平常在开发pc端浏览器的时候。如果要加密或者解密成为一个 base-64 编码的字符串。我们都可以使用Window 对象里的对象方法: atob() 解码一个 base-64 编码的字符串。 btoa() 创建一个 base-64 编码的字符串 我们可以直接在浏览

    2024年02月15日
    浏览(48)
  • [虚幻引擎] UE DTBase64 插件说明 使用蓝图对字符串或文件进行Base64加密解密

    本插件可以在虚幻引擎中使用蓝图对字符串,字节数组,文件进行Base64的加密和解密。 目录 1. 节点说明 String To Base64 Base64 To String Binary To Base64 Base64 To Binary File To Base64 Base64 To File 2. 案例演示 3. 插件下载 String To Base64 对字符串进行Base64加密,字符串会自动转换成UTF8的格式,这

    2024年02月13日
    浏览(76)
  • C#集成数据加密算法,包含DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求

    在需要使用配置文件的工控软件中,往往需要在配置文件和数据库中对一些数据加密,即对一串数据进行加密算法后输出复杂符号和字符的形式,让非相关人员无法识别原有数据,从而对数据或数据库进行相应的保护,这往往也是公司安全部门的基本要求。 网上写加密算法的

    2024年02月03日
    浏览(79)
  • 数据加解密时Base64异常:Illegal base64 character 3a

            用base64工具类对中文进行处理时出现异常,在数据加解密场景中经常使用   解决办法 去掉“data:image/jpeg;base64,”即可。  

    2024年02月15日
    浏览(41)
  • 图解HTTPS协议加密解密全过程

    我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。 HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进

    2024年02月05日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包