`
wanghaisheng
  • 浏览: 92069 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

js文字加密(转载)

阅读更多

未深入了解过数据加密——我想那应该是科学家们的事。 

俺小程序员一个,但喜欢思考,琢磨过“加密的问题”良久良久……(没有最终结果)  这里说说自己琢磨之后的一些想法,仅供茶余饭后  没事瞎想时的一些零星素材。 

“加密”嘛,顾名思义,基本就是要别人看不明白本来可以明白的xx,所以,对于我们日常看见的文字,只要让别人看不明白就算加密了。 

不同于对其他信息的加密(比如音视频),我觉得对“文字”的加密可以有一个很简单的逻辑: 中文字符就那么几千万把个,但却可以组合成无限量的任意文章,字还是那些字,文章的意思却可以相差天远地别! 回想“活字印刷”时的场景,在排字之前,你能知道排出来的是一篇什么文章么??? 

所以,文字的加密很简单——把字“打乱”就可以了。——字还是那些字,打乱之后说不定还是另一篇文章哩! 你知道原文是什么吗??——它可能是另一篇不太读得通顺的文章,也可能是那篇本来就不怎么读得通顺的原文。——这样的加密,你如何破解? 怎么算是已经破解了??  呵呵, 好玩吧? 

现在的问题是,怎么把字打乱? 算法是什么——必须要能根据密钥恢复回来(废话)。 

时间就是效率,不罗嗦了(感觉像在浪费生命), 这里贴出几个小算法,仅供参考,或提出质疑——是否可靠? 提前谢谢提出质疑者(当然有解决办法就更好了)! 


JS 实现:(JS 的底层 Unicode 支持是效率的根本——废话真多!) 

算法1: 字符平移法 

Javascript代码 
  1. (function() {  
  2.     var _Charset = {  
  3.             'cjk': [ 'u4e00''u9fa5' ],    // 汉字 [一-龥]  
  4.             'num': [ 'u0030''u0039' ],    // 数字 [0-9]  
  5.             'lal': [ 'u0061''u007a' ],    // 小写字母 [a-z]  
  6.             'ual': [ 'u0041''u005a' ],    // 大写字母 [A-Z]  
  7.             'asc': [ 'u0020''u007e' ]     // ASCII 可视字符  
  8.         };  
  9.   
  10.     //  
  11.     // 加密:字符码在字符集内平移。  
  12.     // 特点:  
  13.     // 1. 字串越短加密效果越好,若短文不大于密钥长度,则不可破解。  
  14.     // 2. 不增加文本的长度,即密文长度等于原文长度。  
  15.     // 缺点:  
  16.     // 1. 一次只能对“一个”连续值的字符集进行处理,而一般字符串中会  
  17.     //    同时包含多个字符集中的字符。  
  18.     // 2. 汉字平移后的字较生僻,明显体现出已被平移处理;  
  19.     // 推荐:  
  20.     // 适于特定类型的短字符串的处理,如:时间串、名称、标题等。  
  21.     //  
  22.     // 参数 cset:  
  23.     // 用 Unicode 表示 -- 4 位十六进制,前置‘u’,  
  24.     // 可用预定义的 _Charset 属性名标识,默认为 cjk。  
  25.     //  
  26.     // @param array na  - 平移量数组  
  27.     // @param array cset  - 字符集名/范围 [ 起点, 终点 ])  
  28.     // @return string  - 平移后的字符串  
  29.     //  
  30.     String.prototype._shift = (function()  
  31.     {  
  32.         var _cset, _id, _beg, _len, _exp;  
  33.   
  34.         return  function( na, cset ) {  
  35.             switch (typeof cset) {  
  36.                 case 'undefined':  
  37.                     cset = 'cjk';  
  38.                 case 'string':  
  39.                     _cset = (cset == _id) ? null : _Charset[cset];  
  40.                     break;  
  41.                 default: _cset = cset;  
  42.             }  
  43.             if ( _cset ) {  
  44.                 _beg = parseInt(_cset[0].substring(1), 16);  
  45.                 _len = parseInt(_cset[1].substring(1), 16) - _beg + 1;  
  46.                 _exp = RegExp('[\\' + _cset[0] + '-\\' + _cset[1] + ']', 'g');  
  47.                 _id  = cset;  
  48.             }  
  49.             var _sz = na.length,  
  50.                 _cnt = 0;  
  51.             return  this.replace(_exp, function(s) {  
  52.                 var _c = s.charCodeAt(0) - _beg;  
  53.                 return  String.fromCharCode((_c+na[_cnt++%_sz])%_len + _beg);  
  54.             });  
  55.         };  
  56.     })();  
  57.   
  58.   
  59.     //  
  60.     // 解密:字符码在字符集内平移-恢复。  
  61.     //  
  62.     String.prototype._unshift = (function()  
  63.     {  
  64.         var _cset, _id, _beg, _len, _exp;  
  65.   
  66.         return  function( na, cset ) {  
  67.             switch (typeof cset) {  
  68.                 case 'undefined':  
  69.                     cset = 'cjk';  
  70.                 case 'string':  
  71.                     _cset = (cset == _id) ? null : _Charset[cset];  
  72.                     break;  
  73.                 default: _cset = cset;  
  74.             }  
  75.             if ( _cset ) {  
  76.                 _beg = parseInt(_cset[0].substring(1), 16);  
  77.                 _len = parseInt(_cset[1].substring(1), 16) - _beg + 1;  
  78.                 _exp = RegExp('[\\' + _cset[0] + '-\\' + _cset[1] + ']', 'g');  
  79.                 _id  = cset;  
  80.             }  
  81.             var _sz = na.length,  
  82.                 _cnt = 0;  
  83.             return  this.replace(_exp, function(s) {  
  84.                 var _c = s.charCodeAt(0) - _beg;  
  85.                 return  String.fromCharCode((_c-na[_cnt++%_sz]%_len+_len)%_len + _beg);  
  86.             });  
  87.         };  
  88.     })();  
  89.   
  90. })();  


用法: 
Javascript代码 
  1. <script language="JavaScript">  
  2.     var _str = "中文字符串和 English char string 的 JS 加密 Test. 包含一些标点符号,*@%! 等。";  
  3.     var _k1 = [2034,85,45,22,65,213,65,398,356,1709,354];  
  4.     var _enc = _str._shift(_k1);  
  5.     alert(_enc);  
  6.     alert(_enc._unshift(_k1));  
  7. </script>  

密钥是个数组,如果觉得不方便,当然可以用一句话,取每个字符的码值分解成数组了。 

 

算法2:字符错位法 
——相当于把一篇文章的字全部打乱随机重排。

Javascript代码 
  1. (function() {  
  2.     //  
  3.     // 字符错位-加密:  
  4.     // 密钥长 ≥16,循环步长 10, 末尾余量反向对齐错位。  
  5.     // 特点:  
  6.     // 1. 密文为字符串中现有的字符,不易被检测出已加密;  
  7.     // 2. 可适用于任意字符集;  
  8.     // 3. 不增加文本的长度,即密文长度等于原文长度。  
  9.     // 缺点:  
  10.     // 1. 原文不应有固定特征,如 html 标签,否则易破解;  
  11.     // 2. 原文长度必须不小于密钥长度。  
  12.     // 推荐:  
  13.     // 适用于较长的文本处理,一般为文章的正文段落。  
  14.     //  
  15.     // @param array key  - 0-N 连续数字随机排布  
  16.     // @return string    - 加密后的字符串  
  17.     //  
  18.     String.prototype._displace = function( key )  
  19.     {  
  20.         if (key.length < 16 || this.length < key.length)  
  21.             return  false;  
  22.   
  23.         var _pos = key.length, _buf = new Array(_pos);  
  24.   
  25.         
    分享到:
    评论

相关推荐

    文字加密大师

    《文字加密大师:保护你的信息安全》 在数字化时代,信息安全成为了我们生活中不可或缺的一部分。"文字加密大师"就是一款专门针对文字信息加密的实用工具,它能够有效地帮助用户保护自己的隐私,防止敏感信息被未经...

    JS加密C#解密

    "JS加密C#解密"的主题涉及前端JavaScript进行数据加密,然后在后端.NET环境中进行解密的技术方案。这种做法的主要目的是确保在网络传输过程中,敏感信息不被窃取或篡改,增强系统的安全性。 首先,我们需要了解...

    与上传的另一篇资源JS前端加密所对应的.NET版本的加密解密,可实现js加密,后台解密,后台加密,js端解密

    本资源是对另一篇资源js端加密,后台解密/JS端解密,后台加密的后台版本,已亲测可用,并且加密和解密都可正常执行,注意:本资源中包含AES加密解密,RSA加密解密,以及生成PEM格式的RSA公私秘钥,但是有点没做好的...

    用js也可以实现加密

    js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密js实现加密

    php版js混淆加密插件

    总的来说,这个"php版js混淆加密插件"是一个工具集,它可以帮助开发者保护他们的JavaScript代码,防止未经授权的访问和使用,同时还能优化代码大小,提升网页加载效率。通过理解和使用这样的工具,开发人员可以在...

    文字加密解密

    在IT领域,尤其是在信息安全和数据保护方面,文字加密和解密是至关重要的技术。这个名为“文字加密解密”的工具显然旨在提供一种方法,让用户能够安全地收发包含敏感信息的电子邮件。以下是对该主题的详细说明: 1....

    java 混淆、加密js代码

    在压缩包中,文件名为"js",这可能是混淆和加密后的JavaScript代码文件。要使用这个文件,你需要在Java项目中引入这个文件,并在main方法中指定其路径。Java可以调用本地的JavaScript引擎,如Rhino或Nashorn来执行...

    C# 加密软件 可用来加密文字

    标题中的"C# 加密软件 可用来加密文字"指出,这是一个使用C#编程语言开发的软件,主要用于对文字内容进行加密。C#是微软开发的一种面向对象的编程语言,广泛应用于Windows平台上的软件开发,包括桌面应用和网络服务...

    aes.js AES加密js文件

    做项目中需要对前端数据加密传输这个时候需要用到前端加密的算法主要是:Aes.js,Md5.js 一.Vue项目用到的aes.js加密 AES对称加密,比DES安全性高。 AES分为ECB和CBC两种方式。 CBC模式比ECB模式安全。 ECB模式比CBC...

    js中文加密js中文加密js中文加密js中文加密js中文加密

    js中文加密js中文加密js中文加密js中文加密js中文加密js中文加密

    JavaScript的加密算法类库:crypto-js

    JavaScript的加密算法类库Crypto-js是前端开发中用于安全数据处理的重要工具,它提供了一系列的加密和解密功能,使得开发者无需后端支持就能在浏览器环境中实现数据的安全传输和存储。这个库支持多种常见的加密算法...

    文字加密和解密软件!

    可对文字进行加密解密!双方都要有此软件,输入要加密的内容,发给对方,对方再用此软件解密!

    文字加密器

    文字加密器 很实用 很强大

    国密SM2前端js加密,后端加密解密

    国密SM2前端js加密,后端加密解密,publicKey转ECPublicKeyParameters,privateKey转ECPrivateKeyParameters 包括前端加密所需的js文件和后端加解密方法、jar包。

    javascriptjs加密解密概念[借鉴].pdf

    javascriptjs加密解密概念[借鉴].pdf

    js批量加密解密

    JS加密技术主要应用于防止数据在传输过程中被窃取,或者确保存储在客户端的数据不被轻易读取。本文将深入探讨JavaScript批量加密解密的核心概念、常用方法以及相关的安全考虑。 JavaScript批量加密通常涉及以下几个...

    js rsa分段加密

    js rsa加密 分段 使用时encrypt 方法名别忘了变为encryptLong

    文字加密器(php网页)

    php做的网页加密器,你可以在网页上直接加密解密文字

    常用的js加密库。MD5,AES,DES等

    JavaScript(简称JS)作为一种广泛应用于前端开发的编程语言,经常需要处理数据安全问题,尤其是在传输敏感信息时。本文将深入探讨在JS中常用的加密库,包括MD5、AES和DES,以及如何使用CryptoJS这个加密库来实现...

Global site tag (gtag.js) - Google Analytics