JS基于base64编码加密解密文本和图片

news2025/2/3 15:10:46

JS基于base64编码加密解密文本和图片

密码学,体系太庞大了,常见的加密解密算法很多,我仅了解了一下,这里仅介绍采用实现base64加密解密的方法。

严格地说base64不是加密算法,他只是一种编码方式,是一种用64个字符来表示任意二进制数据的方法。详情可参见彻底弄懂base64的编码与解码原理 - 知乎

Base64编码具有不可读性,需要解码后才能阅读。算是伪加密吧。

加密解密文本

加密解密图片

本文例子用到jquery,若本地使用请先下载,我这以里jquery-3.5.1. js版本为例,这样用
<script src="jquery-3.5.1. js"></script>
也可以不下载,需要联网【使用CDN(全称是Content Delivery Network:内容分发网络或内容交付网络)可参见https://blog.csdn.net/cnds123/article/details/126268941】如下使用
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>

基本原理:将图片读入canvas,并使用canvas的toDataURL方法【https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/toDataURL】将图片base64化,在此过程中,可以设定quality值,即图片质量值,值为0.1到1之间,值越小,压缩度越高。
 

Base64是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是把二进制转换为可打印字符,Base64编码具有不可读性,需要解码后才能阅读。关于Base64详情可参考其它资料。

对图片加密并保存

源码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>加密图片并保存</title>
    </head>
<body>
       <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
      请选定要加密的图片文件<input id="file" type="file"  capture="microphone" accept="image/*">
      
       <button type="button" onclick="download()">保存加密图片</button>
       <br>
        
        <img id="pic" >
        <script>
        var stringData;  //要保存的变量
         
        $("#file").change(function(){
            var m_this = this;
            cutImageBase64(m_this,null,900,0.7);
        })
        function cutImageBase64(m_this,id,wid,quality) {
            var file = m_this.files[0];
            var URL = window.URL || window.webkitURL;
            var blob = URL.createObjectURL(file);
            var base64;
            var img = new Image();
            img.src = blob;
            img.onload = function() {
                var that = this;
                //生成比例
                var w = that.width,
                    h = that.height,
                    scale = w / h;
                    w = wid || w;
                    h = w / scale;
                //生成canvas(画布)
                var canvas = document.createElement('canvas');
                var ctx = canvas.getContext('2d');
                $(canvas).attr({
                    width: w,
                    height: h
                });
                ctx.drawImage(that, 0, 0, w, h);
                // 生成base64
                base64 = canvas.toDataURL('image/jpeg', quality || 0.9);
                            
                //加密
                var base64_2 = base64.substring(0,26) + "a" +base64.substring(26,base64.lenght);
                console.log(base64_2);
                stringData = base64_2;
                
            };
        }

       function download(){ 
           //alert(stringData);
           if(stringData ==undefined){
                alert("先选定需要加密的图片!");
                return;
           }
           var text =  stringData;
           var blob = new Blob([text], { type: "text/plain"}); 
           var anchor = document.createElement("a"); 
           //anchor.download = "my-filename.txt"; 
           anchor.download = "加密_" + document.getElementById("file").files[0].name;
           anchor.href = window.URL.createObjectURL(blob); 
           anchor.target ="_blank"; 
           anchor.style.display = "none"; // 
           document.body.appendChild(anchor); 
           anchor.click(); 
           document.body.removeChild(anchor); //
       }

    </script>
   </body>
</html>

保存文件名为:对图片加密并保存.html,用浏览器打开效果:

对已加密图片文件进行解密

对由上面例子加密的图片文件进行解密并可保存到本地,源码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>对已经加密图片解密</title>
    </head>
    
    <body>
    选定已加密的图片文件<input type="file" id="file"/>
    <br>
    <textarea id="output" cols="80" rows="6" readonly="readonly"> </textarea>
    <br> 
    <button type="button" onclick="jm()">解密图片</button> 
 
    <button onclick="downloadIamge('pic','nianling')">保存已解密图片(.jfif)</button>
    <br>
    <img id="pic">
    <script>
        document.getElementById('file').onchange =function(){
            var file = this.files[0];
            var reader = new FileReader();            
            reader.onload = function(progressEvent){    
               var fileContent = this.result;    
               //alert(fileContent );   
               document.getElementById('output').value = fileContent;           
            };
            reader.readAsText(file);
        };

        function jm(){
            var base64_2 = document.getElementById("output").value;  
            if(base64_2 ==" "){
                alert("提示:请先选定要解密的加密图片文件!!!");
                return;
            }
            //解密
            var base64_3 = base64_2.substring(0,26) + base64_2.substring(27,base64_2.length);
            document.getElementById("pic").src=base64_3;
            //console.log(base64_3)
          
        }

    //将img标签中图片保存到本地
    function downloadIamge(selector, name) {
        // 通过选择器获取img元素
        var img = document.getElementById(selector)
        // 将图片的src属性作为URL地址        
        var url = img.src
        //alert(url);
        if(url ==""){
            alert("请先解密已加密的图片文件!");
            return;
        }
        var a = document.createElement('a')
        var event = new MouseEvent('click')

        a.download = name // '下载图片名称'
        a.href = url

        a.dispatchEvent(event) //根据A标签的属性来搞事情
    }


    </script>
  </body>
</html>

保存文件名为:对已加密图片文件进行解密并可保存.html,用浏览器打开效果:

参考

https://www.jb51.net/article/239975.htm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业经营管理的核心是什么?

一、企业经营管理是什么&#xff1f; 企业经营管理通常是指&#xff0c;企业为了满足自身生存发展&#xff0c;通过对企业内部成员的经营活动进行计划、组织、协调、指挥、控制。企业经营管理主要目的是为了让企业在面向市场和用户是时&#xff0c;可以充分利用企业自身优势和…

excel日期函数:如何计算项目的开始和完成日期

制定工作计划是我们平时工作中经常会遇到的一类事务&#xff0c;例如某个项目&#xff0c;需要分成七个阶段来完成&#xff0c;已知项目的开始日期和每个项目需要的时间&#xff08;以天为单位&#xff09;&#xff0c;就可以做出一个项目的工作计划表&#xff1a; 需要重点强调…

无约束优化:修正阻尼牛顿法

文章目录无约束优化&#xff1a;修正阻尼牛顿法梯度法的困难经典牛顿法定义收敛性证明修正阻尼牛顿法考虑修正阻尼牛顿法的起因如何构造修正矩阵M参考文献无约束优化&#xff1a;修正阻尼牛顿法 梯度法的困难 无约束优化&#xff1a;线搜索最速下降 对于光滑函数而言&#x…

pg 锁机制深析

spin lock 使用 cas 去获取锁&#xff0c;先获取 spins_per_delay 次数&#xff0c;如果还失败&#xff0c;则每次获取失败将 delay 时长延长至 1~2倍 delay 值加 0.5 us&#xff0c;spins_per_delay 的值在获取锁后会做更新&#xff0c;如果这次没有等待&#xff0c;则下次可…

Python可视化——matplotlib.pyplot绘图的基本参数详解

目录 1.matplotlib简介 2.图形组成元素的函数用法 2.1. figure()&#xff1a;背景颜色 2.2 xlim()和 ylim()&#xff1a;设置 x&#xff0c;y 轴的数值显示范围 2.3 xlabel()和 ylabel()&#xff1a;设置 x&#xff0c;y 轴的标签文本 2.4 grid()&#xff1a;绘制刻度线的…

NVIDIA深度学习基础-理论与实践入门课程笔记及测验参考代码

1. 使用MNIST数据集进行图像分类 1.1 MNIST数据集 在深度学习的历史当中,对 MNIST 数据集里的70000张手写体数字的图像进行0到9的正确分类是一个重大的进展。如今,这个问题被认为是微不足道的,但是使用 MNIST 进行图像分类已经成为深度学习的一个 Hello World 练习。 以下…

TDC-GP30固件升级笔记

Bootloader介绍 系统重置或系统INIT发生后&#xff0c;总是请求引导加载程序。但是&#xff0c;只有在设置了引导加载器发布代码时&#xff0c;才会执行引导加载器操作。 Bootloader操作包括&#xff1a; “Register Configuration” 寄存器配置”&#xff0c;将配置数据传输…

8-Arm PEG-DBCO分子量决定外观性状,用于修饰生物分子

英文名称&#xff1a;8-Arm PEG-DBCO 中文名称&#xff1a;八臂-聚乙二醇-二苯基环辛炔 分子量&#xff1a;1k&#xff0c;2k&#xff0c;3.4k&#xff0c;5k&#xff0c;10k&#xff0c;20k&#xff08;可按需定制&#xff09; 质量控制&#xff1a;95% 存储条件&#xff…

计算机毕设Python+Vue学校教务管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

计算机中丢失vcruntime140_1.dll,要怎么修复这个问题

关于计算机中丢失vcruntime140_1.dll其实是非常的常见的&#xff0c;当出现这种情况的时候&#xff0c;不需要担心&#xff0c;其实有好多种方法可以解决的。 解决丢失vcruntime140_1.dll的方法 第一种方法&#xff1a;既然计算机丢失了这个vcruntime140_1.dll文件&#xff0…

git:合并多个commit

目录1. 查看提交记录2. 合并commit3. 查看合并后的日志记录1. 查看提交记录 git log --oneline --graph2. 合并commit 这里希望合并最后3个commit&#xff08;modify1&#xff0c;modify2&#xff0c;modify3&#xff09; git rebase -i idid需要使用倒数第4个commit的id&am…

【docker】安装MySQL

实战&#xff1a;安装MySQL 思考&#xff1a;MySQL的数据持久化的问题 #获取镜像 docker pull mysql:5.7 #运行容器&#xff0c;需要做数据挂载 #安装启动MySQL&#xff0c;需要配置密码&#xff08;docker Hub&#xff09; #官方测试 docker run --name some-mysql -e MYSQL…

WebAPi实现多文件上传,并附带参数

需要实现的效果为&#xff0c;通过WebApi实现多文件上传功能&#xff0c;并且在上传时需要能附带文件说明参数&#xff0c;用于保存文件记录 –这里是需要的文件说明参数类 /// <summary>/// 前端文件上传时参数数据/// </summary>public class DistributionData{…

【Spring篇】基于xml的自动装配

&#x1f353;个人主页&#xff1a;个人主页 &#x1f352;系列专栏&#xff1a;SSM框架 自动装配&#xff1a; 根据指定的策略&#xff0c;在IOC容器中匹配某一个bean&#xff0c;自动为指定的bean中所依赖的类类型或接口类 型属性赋值 ①场景模拟 创建类UserControllerpublic…

29.图像卷积代码实现

1. 互相关运算 接下来&#xff0c;我们在corr2d函数中实现如上过程&#xff0c;该函数接受输入张量X和卷积核张量K&#xff0c;并返回输出张量Y。 import torch from torch import nn from d2l import torch as d2ldef corr2d(X,K): # X是输入&#xff0c;K是核矩阵计算二维互…

Cambridge IGCSE Chemistry 真题讲解1

考试局&#xff1a;Cambridge Assessment International Education (CAIE)考试类别&#xff1a;Cambridge International General Certificate of Secondary Education (IGCSE)考试科目&#xff1a;Chemistry考试单元&#xff1a;Paper 2 Multiple Choice (Extended)试卷代码&a…

什么是混合云、公有云、私有云?

很多用户都不清楚混合云、公有云、私有云的定义是什么&#xff0c;很多用户都不是很清楚具体的含义接下来一起跟着小编来看看吧。 一、混合云( hybrid cloud) 在混合云模式中&#xff0c;云平台由两种不同模式(私有或公有)云平台组合而成。这些平台依然是独立实体&#xff0c;但…

GIt远程仓库pull拉取代码

GIt远程仓库pull拉取代码 git教程可以参考之前的这篇文章使用git命令对gitee存放项目到仓库、切换分支以及合并分支教程 这篇文章主要说一下远程连接拉去并提交代码 如果你使用git clone <项目地址>拉取代码后更改无法提交的问题&#xff0c;可以使用以下解决方案 本地…

C++基础学习笔记(三)——核心编程PART1

参考链接&#xff1a;https://www.bilibili.com/video/BV1et411b73Z?p84&vd_sourceb4d9cee68649c8adcb1e266f7147cd5c 一、内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理…

LeetCode 92 双周赛

2481. 分割圆的最少切割次数 圆内一个 有效切割 &#xff0c;符合以下二者之一&#xff1a; 该切割是两个端点在圆上的线段&#xff0c;且该线段经过圆心。该切割是一端在圆心另一端在圆上的线段。 一些有效和无效的切割如下图所示。 给你一个整数 n &#xff0c;请你返回将…