针对文字加密的简单 JS 加密算法 --进制乱序法改良版

[size=medium]在上一篇文章[url=http://rubel.iteye.com/admin/blogs/902999]《普通 http 网络下数据的安全传输(设计原理)》[/url]中,我曾经推荐浏览器和服务器之间的加密通讯宜采用[url=http://rubel.iteye.com/admin/blogs/900503]《几个文字加密的 JS 简洁算法(续2)--进制乱序法》[/url]中提及的算法,但那个算法有密文增长较多的缺点。考虑实用性,这里作了完全重新的设计,可以自动识别单双字节字符,单字节字符用 2 位 16 进制表示,双字节字符用 3 位 41 进制表示,从而降低了密文的增长幅度。

[list]
[*]如认为汉字占用 2 个字节,则中文文本加密后的密文增长幅度为 1.5 倍——与 UTF-8 存储汉字占用字节相同;
[*]英文文本加密后密文的增长原理上是 2 倍,但由于空格是英文中的词汇分界符,在英文文本中大量存在,而空格是不加密的(只占 1 字节),故实际的密文增长并没那么多。
[*]综合评估,在中英文混合的文章中,密文的增长大概在 1.6 ~ 1.8 之间,这并不算严重(如果对密文的增长很敏感,可以用另外两个不增长密文的算法)。[/list]
这里把改良的版本贴出来,希望能对需要的人有所帮助。

[b]算法 3: 进制乱序法[/b] -- 改良版
[/size]

(function() {

//
// 密文字符集(size:62)。
// [0-9A-Za-z]
//
var _hexCHS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

//
// 密文字符顺序映射。
// 顺序与 _hexCHS 同,从 0 开始。
//
var _hexTBL = {
'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9,
'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15, 'G':16, 'H':17, 'I':18, 'J':19,
'K':20, 'L':21, 'M':22, 'N':23, 'O':24, 'P':25, 'Q':26, 'R':27, 'S':28, 'T':29,
'U':30, 'V':31, 'W':32, 'X':33, 'Y':34, 'Z':35, 'a':36, 'b':37, 'c':38, 'd':39,
'e':40, 'f':41, 'g':42, 'h':43, 'i':44, 'j':45, 'k':46, 'l':47, 'm':48, 'n':49,
'o':50, 'p':51, 'q':52, 'r':53, 's':54, 't':55, 'u':56, 'v':57, 'w':58, 'x':59,
'y':60, 'z':61
};

//
// 进制转换加密法
// 原理:
// 用 [0-9A-Za-z] 62 个字符的随机排列作为进制表对字符的值进行转换。
// 特点:
// 1. 密文为数字和大小写英文字母,及原有的 [\s\n\r];
// 2. 增加了密文字符的平移操作,提高加密强度;
// 3. 可自动识别单双字节字符并进行相应编码;
// 4. 双字节字符用 3 位 41 进制表示,最大可表示 68920 的字值;
// 5. 单字节字符用 2 位 16 进制表示,最大可表示 255 的字值;
// 6. 空白、换行和回车 [\s\n\r] 保持原样。
// 缺点:
// 密文会比原文长,中文视宽增长 1.5 倍(一个汉字算 2 字节宽);
// 考虑空白和换行/回车不处理,英文增长 < 2 倍。
// 推荐:
// 可用于任意类型的文本加密,由于密文为规范的 [\w],适于各类环境。
//
// 参数:
// key[0-57) 间的值小于 62 且唯一,其后的值可任意和重复;
// key[0-16) 为 16 进制字符表,key[16-57) 为 41 进制字符表。
//
// @param array key - [0-61] 互斥值数组,length >= 57
//
Hexch = function( key )
{
if (key.length < 57) {
throw new Error('the key is too short.');
}
// 平移密钥
this._sz = _hexCHS.charCodeAt(key[15]) % (key.length-20) + 10,
this._ks = key.slice(-this._sz);
for (var _i=0; _i<this._sz; ++_i) {
this._ks[_i] = _hexCHS.charCodeAt(this._ks[_i]%62);
}

this._k16 = [], this._k41 = [];
this._t16 = {}, this._t41 = {};

for (var _i=0; _i<16; ++_i) {
this._k16[_i] = _hexCHS.charAt(key[_i]);
this._t16[this._k16[_i]] = _i;
}
for (var _i=0; _i<41; ++_i) {
this._k41[_i] = _hexCHS.charAt(key[_i+16]);
this._t41[this._k41[_i]] = _i;
}
};

// 加密
Hexch.prototype.enc = function( s )
{
var _k16 = this._k16,
_k41 = this._k41,
_ks = this._ks,
_sz = this._sz,
_cnt = 0;
return s.replace(/[^\s\n\r]/g, function( ch ) {
var _n = ch.charCodeAt(0);
return (_n <= 0xff)
? _k16[parseInt(_n/16)] + _k16[_n%16]
: _k41[parseInt(_n/1681)] + _k41[parseInt(_n%1681/41)] + _k41[_n%41]
// 平移
}).replace(/[0-9A-Za-z]/g, function( ch ) {
return _hexCHS.charAt((_hexTBL[ch] + _ks[_cnt++%_sz]) % 62);
});
};

// 解密
Hexch.prototype.dec = function( s )
{
var _t16 = this._t16,
_t41 = this._t41,
_ks = this._ks,
_sz = this._sz,
_cnt = 0;
var _s = s.replace(/[0-9A-Za-z]/g, function( ch ) {
return _hexCHS.charAt((_hexTBL[ch] - _ks[_cnt++%_sz]%62 + 62) % 62);
});
var _rs = '';
for (var _i=0; _i<_s.length;) {
var _ch = _s.charAt(_i);
if (/[\s\n\r]/.test(_ch)) {
_rs += _ch;
++_i;
} else if (_t16[_ch] !== undefined) {
_rs += String.fromCharCode(_t16[_s.charAt(_i)]*16 + _t16[_s.charAt(_i+1)]);
_i += 2;
} else {
_rs += String.fromCharCode(_t41[_s.charAt(_i)]*1681 + _t41[_s.charAt(_i+1)]*41 + _t41[_s.charAt(_i+2)]);
_i += 3;
}
}
return _rs;
};

})();

[size=medium][b]用法:[/b][/size]

<script language="JavaScript">
var _str = "中文字符串和 English char string 的 JS 加密 1234. 包含一些标点符号,*@%! 等。";
var _k3 = [61,37,44,31,34,7,24,6,43,12,27,3,25,29,60,33,35,41,58,2,51,49,9,5,59,11,42,32,22,40,4,57,50,38,8,56,21,19,52,53,16,28,1,26,47,17,54,46,10,23,55,13,14,20,15,36,18];
var _o = new Hexch(_k3);
var _enc3 = _o.enc(_str);
alert(_enc3)
//7Eg9K4UTzvBzgBPPTC eEb6xHzJHQIKEq jIhRYSpl MNCfJqxNzsHK KlP hmuo 61BNLv Nhcvd4g9cr aDkCWBJXPgR6y9iiG6GRQx4PT5AYatm1rsS rnQxSr
alert(_o.dec(_enc3));

[size=medium][b]注:[/b] _k3 是一个 [0-61] 的互斥值随机排列数组,可用 PHP 命令行执行如下代码得到。
[/size]

$a=range(0,61); shuffle($a); echo join(',', $a); // _k3 只需前 57 项元素。

[size=medium]
[b]说明[/b]:本人原创,代码可以自由使用!
[/size]
逆向工程实战:破解极验点选验证码的完整流程与技术解析 验证码作为网络安全的基础防线,其核心原理是通过人机交互差异来区分真实用户与自动化程序。现代验证码如极验(GeeTest)采用了动态加密、行为轨迹分析和多重风控机制,将验证逻辑前移并深度混淆,大幅提高了自动化破解的难度。其技术价值在于通过前端复杂的JavaScript代码和加密算法,对用户操作行为进行实时采集与加密传输,确保交互数据不可伪造。在数据采集、自动化测试和安全研究等应用场景中,理解验证码的工作原理成为关键技术需求。本文以B站登录场景中的极验点选验证码为例,深入剖析其逆向工程全流程。通过动态调试、Ho 阅读详情

相关推荐

JavaScript的互斥(mutex)对象。-JavaScript开发

基于承诺的互斥锁允许顺序执行相同的异步操作。 一个典型的用例示例是检查资源是否存在,并作为原子异步操作读取/创建资源。 互斥(mutex)JavaScript的互斥(mutex)对象。 动机API配置用法示例图像服务器示例相关库动机基于承诺的互斥量允许顺序执行相同的异步操作。 一个典型的用例示例是检查资源是否存在,并作为原子异步操作读取/创建资源。 假设您有一个HTTP服务,该服务可应要求下载并提供图像。 天真的工具

盘点五种最常用加密算法!

加密算法

qq_40638618的博客 1645

文字加密解密

可对文字进行加密解密。适合收发电子邮件的时候对重要信息进行加密。 加密的两端都需要本软件进行加解密。

常见加密算法——哈希算法(MD)

加密算法是一种利用数学方法对数据进行变换的技术,旨在保护数据的安全,防止未经授权的访问或修改。对称加密算法非对称加密算法和哈希算法(也称为摘要算法)。MD5(Message Digest Algorithm 5)是一种广泛使用的加密哈希函数,它能够接受输入(如一个文件或一段文字)并生成一个固定长度的128位(16字节)的哈希值,通常以32位的十六进制数字表示。MD5算法由罗纳德·李维斯特(Ronald L. Rivest)在1992年设计,旨在确保数据的完整性。

HHX_01的博客 6216

支持中英文字字符混合的md5加密算法(javascript)

网上找了很多javascript编写的MD5算法,均不支持中文字符,也就是说被散列的字符中含有中文的话,散列后的结果与java或其他语言散列的结果不一样。因此特地上传这个javacript编写的支持中英文字字符混合的md5加密算法(带示例),以供需要把WEB客户端加密传送参数到服务端的用户使用。

MacOS上VScode配置PlatformIO Core的疑难杂症与提速实战

本文详细解析了在MacOS上使用VScode配置PlatformIO Core时遇到的安装卡死、新建项目缓慢等常见问题,并提供了官方脚本安装、网络优化、命令行预下载等实用解决方案。通过环境变量配置和镜像源加速,大幅提升开发效率,特别适合ESP32等嵌入式开发场景。

weixin_42567046的博客 220

字符串加密

字符串加密

xingfuyisheng的专栏 2474

Win10下YOLOv8环境搭建避坑指南:从CUDA 11.6到cuDNN配置全流程

本文详细介绍了在Windows 10系统下搭建YOLOv8环境的完整流程,包括CUDA 11.6和cuDNN的配置步骤,以及常见问题的解决方案。通过硬件准备、软件安装、环境验证和性能优化等环节,帮助开发者高效完成YOLOv8环境配置,提升目标检测项目的开发效率。

defi6farmer的博客 224

常见的七种加密算法及实现

数字签名、信息加密是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的签名加密算法来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。

linzhongshu的专栏 3573

GraphRAG 踩坑记录

GraphRAG踩坑记录

yufanwenshu的博客 4351

ThinkPHP 8.1 + think-swoole 4.1 实战:5分钟搞定WebSocket聊天室(附完整代码)

本文详细介绍了如何使用ThinkPHP 8.1和think-swoole 4.1快速构建高并发WebSocket聊天室。通过5分钟实战教程,开发者可以轻松实现用户列表、消息广播等核心功能,支持2000+并发连接,适用于客服系统、在线协作等实时通信场景。

ol789012345的博客 126

一种加密方法(16进制)

一种简单的加密方法,信息轻松加密,数据更安全

极简 2813

jason-2卫星介绍及其数据下载

两台仪器发射脉冲宽度均为105.6μs,带宽320MHz(C频段)和320/100MHz(Ku频段),脉冲重复频率1800Hz(Ku频段)和300Hz(C频段),功率78W,数据传输速率22.5kbit/s。共发射了3颗卫星(Jason - 1/2/3),星上有效载荷均主要为雷达高度计和微波辐射计。Jason - 1卫星主要有效载荷为波塞冬 - 2和“贾森微波辐射计”,Jason - 2卫星进行了改进,主要携带了波塞冬 - 3和先进微波辐射计,此外,Jason - 2卫星还携带了“多里斯”系统。

beautyaaaa的博客 1606

Vue 完整版系统知识文档

《Vue全栈开发实战手册》摘要 本手册系统整合Vue2/Vue3全栈知识体系,涵盖基础语法、组件开发、状态管理、工程化等核心内容,适合从入门到精通的完整学习路径。主要特点: 基础核心 详解MVVM架构和响应式原理(Vue2的Object.defineProperty vs Vue3的Proxy) 完整模板语法规则与16种内置指令解析 组件系统核心:通信机制(8种方案)、插槽、动态组件、递归组件 进阶实战 状态管理:Vuex/Pinia完整解决方案 路由开发:动态路由、权限控制、懒加载 工程化:Webpack

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 401

51单片机——LCD12864驱动函数深度解析与实战优化

本文深入解析了51单片机驱动LCD12864液晶屏的核心驱动函数,从底层时序、关键延时到地址计算进行逐行剖析,并针对常见显示问题提供系统性的调试技巧与实战优化方案。重点探讨了如何将基础代码优化为稳定高效的驱动,涵盖延时精准化、批量写入及显示缓冲区等高级技巧,旨在帮助开发者从“点亮”屏幕进阶到“精通”驱动,确保显示稳定可靠。

weixin_29190169的博客 84

突破NER性能瓶颈:BERT与LLM协同的混合架构实践

性能卓越:在多个测试集上,F1分数比单一模型提升5-15%成本可控:相比纯LLM方案,成本降低60%以上易于落地:架构清晰,便于调试和优化这种"专才+通才"的组合思路可以扩展到其他NLP任务中,如关系抽取、事件提取、文本分类等。更精细的流水线优化多模型投票机制在线学习与自适应调整不追求单一模型的万能,而是通过精心设计的组合,让每个组件发挥其独特优势,最终实现系统性能的最优化。欢迎在评论区分享你在NER任务中的实践经验,或者对这个混合架构的改进建议!

Ven%的博客 1022

字符串加密、解密算法

字符串加密、解密算法包括: MD5、Des、Base64三种方式,详情如下所示: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace EncryptTools { /// <summary> /// 加解密帮助类 /// &.

坚持、争取、沟通、包容、信任、... 3536

从原理图到代码:深入解析SX1278 LoRa模块与STM32的SPI通信驱动(附完整工程)

本文深入解析了SX1278 LoRa模块与STM32的SPI通信驱动实现,从硬件原理图到完整工程代码,详细介绍了LoRa技术的通信原理、寄存器配置、SPI接口设计及低功耗优化策略。适合物联网开发者和嵌入式工程师提升远距离无线通信能力,附完整工程代码助力快速开发。

weixin_42715608的博客 423

对文本简单加密解密算法

//单个字符异或运算 ENCRYPTDLL_API char MakecodeChar(char c, int key) { return c = c^key; } //单个字符解密 ENCRYPTDLL_API char CutcodeChar(char c, int key) { return c^key; } //加密 ENCRYPTDLL_API void Makecode(char *pstr, int *pkey) { int len = strlen(pstr);//获取长度 f.

WZY31014332886的专栏 1471

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

几个文字加密的 JS 简洁算法(字符平移法)和一些个人的想法

[size=medium]未深入了解过数据加密——我想那应该是科学家们的事。 俺小程序员一个,但喜欢思考,琢磨过“加密的问题”良久良久……(没有最终结果) 这里说说自己琢磨之后的一些想法,仅供茶余饭后 没事瞎想时的一些零星素材。 “加密”嘛,顾名思义,基本就是要别人看不明白本来可以明白的xx,所以,对于我们日常看见的文字,只要让别人看不明白就算加密了。 不同于对其他信息的加密...

testdownabc的专栏 611

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

几个文字加密的 JS 简洁算法(续2)--进制乱序法

[size=medium]续前一篇博文[url=http://rubel.iteye.com/blog/891657]《几个文字加密的简洁算法和一些个人的想法》[/url]——字符平移法 以及上一篇博文[url=http://rubel.iteye.com/blog/897191]《几个文字加密的简洁算法(续)》[/url]——字符错位法 这里提供第三种加密方法——对字符 [b]Unicode...

testdownabc的专栏 377

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

为AJAX实现互斥

随着AJAX范例得到越来越广泛的应用,浏览器页面可以在向后台服务器请求数据的同时保持前端用户界面的活跃性(因此在AJAX中称为异步)。然而,当这两个活动同时访问共用的JavaScript和DOM数据结构时就会引发问题。JavaScript没有提供针对该并发程序问题的经典解决方案。本文描述了作者在互斥机制方面的新见解,该经过验证的互斥机制在JavaScript中能发挥良好的作用。为什么需要互斥?

baggio785的专栏 1842

一个简单且安全的文件加密算法------异或加密

有空了,再写!

认知 行动 坚持 2万+

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 200
上一篇: 普通 http 网络下数据的安全传输(设计原理)
下一篇: 一个类似 Base64 但真正实现了加密的 JS 文字加密算法
testdownabc
博客等级 码龄18年 4粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值