JS基于编码方式实现加密解密文本

news2024/11/18 14:00:28

JS基于编码方式实现加密解密文本

严格来讲这是一种简单的编码方式:加密,将明文【注】转成编码。解密则是编码转码为明文本。

【注:明文是指没有加密的文字(或者字符串),一般人都能看懂。】

下面源码用到 这个fromCharCode() 方法,先介绍之。在 JavaScript 中, fromCharCode() 是一种字符串方法,用于从Unicode 值序列创建字符串。

fromCharCode() 方法的语法是:

String.fromCharCode(value1, value2, ... value_n);

参数

value1, value2, ... value_n  在Unicode的值转换为字符,然后串接为一个字符串。

返回值

fromCharCode() 方法接受一系列 Unicode 值,它们被转换为字符并连接在一起形成一个字符串。这个结果字符串然后由 fromCharCode() 方法返回。

源码如下:

<html>
<head>
<meta charset="utf-8" />
<title>JS加密解密</title>
</head>
<body>
  <h1> 加密解密 </h1>
  <!-- <input type="text" id="secret" /> -->
  <textarea id="secret" cols="60" rows="10"></textarea>
  <br>
  <input type="button" value="加密" onclick="encode()">
  <input type="button" value="解密" onclick="decode();">
<script>
//来源 https://www.jb51.net/article/141307.htm

// 加密
function encode() {
    // var s = secret.value;
    // s 是一个字符串, 类型: String
    // 根据 s 来创建一个字符串对象
    // str 的类型是: Object
    // var str = new String(s);
    // length 是获取字符串对象的长度,也就是说有多少个字符
    // str.length
    var str = secret.value;
    var r = "";
    // string 类型的可以当做字符串对象来用
    for (var i = 0; i < str.length; i++) {
        // 取出下标为 i 字符的编码
        var code = str.charCodeAt(i);
        // 将字符对应的编码,拼接到一个空字符串上
        r += code;
        // 每个符号后,添加 , 分割
        r += ",";
    }
    // secret.value 
    // 设置输入框的内容为 r
    secret.value = r;
}
// 使用到知识点(1)---如何将一个 数字 转换成对应的 字符
// String.fromCharCode 
// 函数功能: 将 数字 转换成对应的 字符
// String 其实是系统的一个对象
// document.write(  String.fromCharCode(97) );


// 解密
function decode() {
    // 获取文本框中的字符串
    // 例如: 96,97,98
    var str = secret.value;
    // 思路:
    // 1. 按照 , 分割字符串
    // 2. 将每个 分割的子字符串 转换成 数字,再转换成 字符
    //   96 97 98
    // 3. 将还原的字符,拼接在一起,再设置到 input 中去
    var arr = str.split(",");
    // 用于拼接结果的
    var r = "";
    for (var i = 0; i < arr.length; i++) {
        // 获取加密后的 字符串的编码,是一个数字
        var code = parseInt(arr[i]);
        r += String.fromCharCode(code);
    }
    // 将拼接后的结果,设置到 input 中
    secret.value = r;
}

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

保存文件名为:基于编码方式加密解密文本A.html,用浏览器打开效果:

现在修改上面的源码,添加读入和保存文本文件的功能,源码如下:

<html>
<head>
<meta charset="utf-8" />
<title>JS加密解密B</title>
</head>
<body>
    <h1> 加密解密 </h1>
    读入文本文件<input type="file" id="file" accept=".txt"/>
    <button type="button" onclick="download()">保存</button>
    <br>
     <textarea id="secret" cols="60" rows="10"></textarea>
    <br>
    <input type="button" value="加密" onclick="encode()">
    <input type="button" value="解密" onclick="decode();">

    <script>
       var fileName;
       //读选择的文本文件到多行文本框
       document.getElementById('file').onchange =function(){
         var file = this.files[0];
         fileName=document.getElementById('file').files[0].name;
         //alert(fileName);
         var reader = new FileReader();
         reader.onload = function(progressEvent){    
           var fileContent = this.result;       
           document.getElementById("secret").value = fileContent;           
         };
         reader.readAsText(file);
       };

       //下载多行文本框的内容到本地
       function download(){ 
         
         var text = document.getElementById("secret").value; 
         //alert(text); 
         if(text==""){
             alert("没有内容可保存!");
             return;
         } 
         var blob = new Blob([text], { type: "text/plain"}); 
         
         var anchor = document.createElement("a"); 
         //anchor.download = "my-filename.txt"; 
         anchor.download = fileName;
         anchor.href = window.URL.createObjectURL(blob); 
         anchor.target ="_blank"; 
         anchor.style.display = "none"; // just to be safe! 
         document.body.appendChild(anchor); 
         anchor.click(); 
         document.body.removeChild(anchor); 
      }


        //加密解密实现来源 https://www.jb51.net/article/141307.htm
        // 加密
        function encode() {
            // var s = secret.value;
            // s 是一个字符串, 类型: String
            // 根据 s 来创建一个字符串对象
            // str 的类型是: Object
            // var str = new String(s);
            // length 是获取字符串对象的长度,也就是说有多少个字符
            // str.length
            var str = secret.value;
            var r = "";
            // string 类型的可以当做字符串对象来用
            for (var i = 0; i < str.length; i++) {
                // 取出下标为 i 字符的编码
                var code = str.charCodeAt(i);
                // 将字符对应的编码,拼接到一个空字符串上
                r += code;
                // 每个符号后,添加 , 分割
                r += ",";
            }
            // secret.value 
            // 设置输入框的内容为 r
            secret.value = r;
        }
        // 使用到知识点(1)---如何将一个 数字 转换成对应的 字符
        // String.fromCharCode 
        // 函数功能: 将 数字 转换成对应的 字符
        // String 其实是系统的一个对象
        // document.write(  String.fromCharCode(97) );


        // 解密
        function decode() {
            // 获取文本框中的字符串
            // 例如: 96,97,98
            var str = secret.value;
            // 思路:
            // 1. 按照 , 分割字符串
            // 2. 将每个 分割的子字符串 转换成 数字,再转换成 字符
            //   96 97 98
            // 3. 将还原的字符,拼接在一起,再设置到 input 中去
            var arr = str.split(",");
            // 用于拼接结果的
            var r = "";
            for (var i = 0; i < arr.length; i++) {
                // 获取加密后的 字符串的编码,是一个数字
                var code = parseInt(arr[i]);
                r += String.fromCharCode(code);
            }
            // 将拼接后的结果,设置到 input 中
            secret.value = r;
        }

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

保存文件名为:基于编码方式加密解密文本B.html,用浏览器打开效果:

本文源码 参考https://www.jb51.net/article/141307.htm

JS基于base64编码加密解密文本和图片,可参见https://blog.csdn.net/cnds123/article/details/128378403

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

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

相关文章

年底了,感谢大家2022年的支持,虚竹哥送10本JAVA好书

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1f3c6;&#xff0c;阿里云专家博主&#x1f3…

碧兴物联IPO过会:拟募资4亿 预计年净利降幅超10%

雷递网 雷建平 12月21日碧兴物联科技&#xff08;深圳&#xff09;股份有限公司&#xff08;简称&#xff1a;“碧兴物联”&#xff09;日前IPO过会&#xff0c;准备在科创板上市。碧兴物联计划募资4.13亿元。其中&#xff0c;1.92亿元用于智慧生态环境大数据服务项目&#xff…

【MySQL】JDBC编程重点知识汇总

文章目录1. JDBC (API):2. JDBC代码编写:2.1 创建数据源对象:2.2 建立连接:2.3 构造SQL语句:2.4 执行SQL:2.5 释放资源:1. JDBC (API): 前面学过很多的SQL, 实际开发中大多数的SQL都不是手敲的, 都是通过程序来执行的. 各种的数据库都会提供API方便编程语言来控制; API (Appli…

【JavaEE】网络初识

初识网络协议 OSI七层和TCP/IP五层&#xff08;四层&#xff09; 应用层 应用程序 代码实现 传输层 端到端传输 &#xff08;如玩家对玩家&#xff09; 操作系统内核实现 网络层 点到点传输 操作系统内核实现 数据链路层 相邻节点之间的传输 &#xff08;如集散点…

ChatGPT能接入微信了

前两天还看到不少人讨论&#xff0c;要是ChatGPT接入微信是啥感觉&#xff1f; 这不&#xff0c;想你所想&#xff0c;项目已经来了~ 来看效果&#xff0c;ChatGPT就出现在普通的微信对话框里&#xff0c;有问必答&#xff1a; 甚至还能拉入群聊&#xff0c;大家共用&#xf…

Adobe Premiere Pro 2020 系统兼容性报告:不支持的视频驱动程序

Adobe Premiere Pro 2020 系统兼容性报告&#xff1a;不支持的视频驱动程序 1. 问题 打开Adobe Premiere Pro 2020&#xff0c;看见系统兼容性报告&#xff1a;不支持的视频驱动程序。如下图&#xff1a; 点击修复&#xff0c;进入安装 Intel 图形驱动程序教程页面&#xff0…

DQL查询数据

文章目录DQL指定查询字段where条件子句联表查询分页和排序子查询DQL &#xff08;Data Query Language&#xff1a;数据查询语言&#xff09; 所有的查询操作都要用到它 select简单的查询&#xff0c;复杂的查询都要用到它数据库最核心的语言&#xff0c;最重要的语言使用频率…

python写个网页,使用flask显示时间登陆注册

用python写个网页。显示当前时间 可以使用 Python 的 datetime 模块来获取当前时间&#xff0c;然后使用 Python 的 Flask 框架来创建网页。 首先&#xff0c;需要安装 Flask&#xff1a; pip install flask 然后&#xff0c;可以使用以下代码创建一个 Flask 应用程序&#…

【Numpy基础知识】字节交换

字节交换 来源&#xff1a;Numpy官网&#xff1a;https://numpy.org/doc/stable/user/basics.html 文章目录字节交换导包【1】字节排序和ndarrays 简介【2】更改字节顺序导包 import numpy as np【1】字节排序和ndarrays 简介 ndarray 是一个对象&#xff0c;它为内存中的数据…

2023年,我的儿子刚从美国名校毕业,就失业了...

前不久&#xff0c;朋友圈里一篇名为《2023年&#xff0c;我的儿子刚从美国名校毕业&#xff0c;就失业了…》的文章火爆全网。 故事里的男孩出生于一个中产阶级家庭&#xff0c;从每年12万的幼儿园开始一路接受了优质教育&#xff0c;最终不负众望从美国前50名校的商学院毕业…

Ubuntu20.04LTS环境docker+cephadm方式部署Ceph 17.2.5

Ubuntu20.04LTS环境dockercephadm方式部署Ceph 17.2.51. 前言2. 环境准备2.1. 主机信息2.2. NTP时间同步2.3. 关闭 iptable 和 firewalld2.4. 关闭 SElinux2.5. 生成SSH证书&#xff0c;并分发到其他节点2.6. 依赖安装3. 安装部署Ceph17.2.53.1. 安装cephadm&#xff0c;拉取ce…

玩转ast- 手写babel插件篇

AST抽象语法树是什么&#xff1f;抽象语法树&#xff08;Abstract Syntax Tree&#xff0c;AST&#xff09;是源代码语法结构的一种抽象表示它以树状的形式表现编程语言的语法结构&#xff0c;树上的每个节点都表示源代码中的一种结构每个包含type属性的数据结构&#xff0c;都…

基于Amlogic T972:结合DTS、驱动、Datasheet,解析Pinctrl子系统、GPIO脚的复用方法

文章目录前言一、概念1.1 Pinctrl devices1.2 Pinctrl client devices二、例&#xff08;1&#xff09;GPIOZ_9/10 复用为 i2c2_z2.1 Pin controller devices2.1.1 设备树配置: dts2.1.2 源码&#xff1a;驱动配置2.1.3 Datasheet2.2 Pinctrl client devices2.2.1 设备树配置&a…

华为云桌面,开启云上高效办公之旅!

在传统办公模式中&#xff0c;企业必须自己购买服务器和数据库软件才能进行日常管理&#xff0c;部署繁琐&#xff0c;还需要日常运维。而云桌面办公系统通过将传统的计算机终端与云计算平台有机地结合起来&#xff0c;使企业能够轻松应对各种变化带来的威胁和压力。 其中华为云…

用户与技术双向推动,小游戏赛道迎来新一轮增长机会

2017 年 12 月 28 日&#xff0c;微信小游戏正式上线。“跳一跳”刷爆了微信朋友圈&#xff0c;随后欢乐斗地主、坦克大战、纪念碑谷、拳皇等经典游戏纷纷出现在小游戏平台上。在过去的5年间&#xff0c;各大平台纷纷紧跟微信的步伐&#xff0c;纷纷入局小游戏&#xff0c;当前…

回调函数的基本使用

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;《初识C语言》 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、什么是回调函数二、为什么要…

打开新世界大门,测试人可以用Chrome插件干什么?

什么是Chrome插件 这篇文章所说的Chrome插件&#xff0c;也就是我们通常说的Chrome扩展 (Chrome Extension)&#xff0c;是一个用Web技术开发、用来增强浏览器功能的软件&#xff0c;它其实就是一个由 HTML、CSS、JS、图片等资源组成的一个 .crx 后缀的压缩包。 让我们来看看…

Android12屏下指纹解析

版权声明&#xff1a;本文为梦想全栈程序猿原创文章&#xff0c;转载请附上原文出处链接和本声明 前言&#xff1a;google官方更新了Android12的指纹架构&#xff0c;新添加了关于屏下指纹(屏下光学跟屏下超声波)的支持&#xff0c; 刚好近期要研究这个&#xff0c;想把自己的…

移动硬盘安装ubuntu系统二——启动U盘安装

一. 简介 在之前的一篇文章中记录了使用VMware Workstation给移动硬盘中安装Ubuntu系统过程&#xff0c;本篇文章简单记录使用启动盘安装 Ubuntu 20.04.5系统到移动硬盘。 二. 制作Ubuntu镜像的系统启动盘 按照官网 Install Ubuntu desktop上介绍&#xff0c;在 Windows 上可…

【Transformer】——李宏毅机器学习笔记

Transformer 前言 transformer是一个sequence-to-sequence(seq2seq) 的 model input a sequence&#xff0c;output a sequence. The output length is determined by model. 例如 语音辨识&#xff1a; 那么为什么不能把以上三种模型结合起来&#xff0c;进行语音识别呢&…