- 浏览: 141226 次
- 性别:
- 来自: 西南边陲
最新评论
-
leafxf:
这个和直接引用js有多大不同和优点?
近乎完美的简单 JS 跨域解决方式 --window.name -
zhangyg:
我怎么不行,我在执行到 var _getData = func ...
近乎完美的简单 JS 跨域解决方式 --window.name -
ray_linn:
akane 写道以后都走网上电子书城 楼主的问题就解决了
又 ...
试说知识传播与版权限制的两难 ---牢骚、希望或灵感 -
asd:
知识库还是很好的,我不知道这里面的商业模式是什么,但是百度文库 ...
试说知识传播与版权限制的两难 ---牢骚、希望或灵感 -
lkj107:
支持知识产权保护,BS百毒好好看看google是如何达到共赢的 ...
试说知识传播与版权限制的两难 ---牢骚、希望或灵感
未深入了解过数据加密——我想那应该是科学家们的事。
俺小程序员一个,但喜欢思考,琢磨过“加密的问题”良久良久……(没有最终结果) 这里说说自己琢磨之后的一些想法,仅供茶余饭后 没事瞎想时的一些零星素材。
“加密”嘛,顾名思义,基本就是要别人看不明白本来可以明白的xx,所以,对于我们日常看见的文字,只要让别人看不明白就算加密了。
不同于对其他信息的加密(比如音视频),我觉得对“文字”的加密可以有一个很简单的逻辑: 中文字符就那么几千万把个,但却可以组合成无限量的任意文章,字还是那些字,文章的意思却可以相差天远地别! 回想“活字印刷”时的场景,在排字之前,你能知道排出来的是一篇什么文章么???
所以,文字的加密很简单——把字“打乱”就可以了。——字还是那些字,打乱之后说不定还是另一篇文章哩! 你知道原文是什么吗??——它可能是另一篇不太读得通顺的文章,也可能是那篇本来就不怎么读得通顺的原文。——这样的加密,你如何破解? 怎么算是已经破解了?? 呵呵, 好玩吧?
现在的问题是,怎么把字打乱? 算法是什么——必须要能根据密钥恢复回来(废话)。
时间就是效率,不罗嗦了(感觉像在浪费生命), 这里贴出几个小算法,仅供参考,或提出质疑——是否可靠? 提前谢谢提出质疑者(当然有解决办法就更好了)!
JS 实现:(JS 的底层 Unicode 支持是效率的根本——废话真多!)
算法1: 字符平移法
用法:
密钥是个数组,如果觉得不方便,当然可以用一句话,取每个字符的码值分解成数组了。
(待续……)
俺小程序员一个,但喜欢思考,琢磨过“加密的问题”良久良久……(没有最终结果) 这里说说自己琢磨之后的一些想法,仅供茶余饭后 没事瞎想时的一些零星素材。
“加密”嘛,顾名思义,基本就是要别人看不明白本来可以明白的xx,所以,对于我们日常看见的文字,只要让别人看不明白就算加密了。
不同于对其他信息的加密(比如音视频),我觉得对“文字”的加密可以有一个很简单的逻辑: 中文字符就那么几千万把个,但却可以组合成无限量的任意文章,字还是那些字,文章的意思却可以相差天远地别! 回想“活字印刷”时的场景,在排字之前,你能知道排出来的是一篇什么文章么???
所以,文字的加密很简单——把字“打乱”就可以了。——字还是那些字,打乱之后说不定还是另一篇文章哩! 你知道原文是什么吗??——它可能是另一篇不太读得通顺的文章,也可能是那篇本来就不怎么读得通顺的原文。——这样的加密,你如何破解? 怎么算是已经破解了?? 呵呵, 好玩吧?
现在的问题是,怎么把字打乱? 算法是什么——必须要能根据密钥恢复回来(废话)。
时间就是效率,不罗嗦了(感觉像在浪费生命), 这里贴出几个小算法,仅供参考,或提出质疑——是否可靠? 提前谢谢提出质疑者(当然有解决办法就更好了)!
JS 实现:(JS 的底层 Unicode 支持是效率的根本——废话真多!)
算法1: 字符平移法
(function() { var _Charset = { 'cjk': [ 'u4e00', 'u9fa5' ], // 汉字 [一-龥] 'num': [ 'u0030', 'u0039' ], // 数字 [0-9] 'lal': [ 'u0061', 'u007a' ], // 小写字母 [a-z] 'ual': [ 'u0041', 'u005a' ], // 大写字母 [A-Z] 'asc': [ 'u0020', 'u007e' ] // ASCII 可视字符 }; // // 加密:字符码在字符集内平移。 // 特点: // 1. 字串越短加密效果越好,若短文不大于密钥长度,则不可破解。 // 2. 不增加文本的长度,即密文长度等于原文长度。 // 缺点: // 1. 一次只能对“一个”连续值的字符集进行处理,而一般字符串中会 // 同时包含多个字符集中的字符。 // 2. 汉字平移后的字较生僻,明显体现出已被平移处理; // 推荐: // 适于特定类型的短字符串的处理,如:时间串、名称、标题等。 // // 参数 cset: // 用 Unicode 表示 -- 4 位十六进制,前置‘u’, // 可用预定义的 _Charset 属性名标识,默认为 cjk。 // // @param array na - 平移量数组 // @param array cset - 字符集名/范围 [ 起点, 终点 ]) // @return string - 平移后的字符串 // String.prototype._shift = (function() { var _cset, _id, _beg, _len, _exp; return function( na, cset ) { switch (typeof cset) { case 'undefined': cset = 'cjk'; case 'string': _cset = (cset == _id) ? null : _Charset[cset]; break; default: _cset = cset; } if ( _cset ) { _beg = parseInt(_cset[0].substring(1), 16); _len = parseInt(_cset[1].substring(1), 16) - _beg + 1; _exp = RegExp('[\\' + _cset[0] + '-\\' + _cset[1] + ']', 'g'); _id = cset; } var _sz = na.length, _cnt = 0; return this.replace(_exp, function(s) { var _c = s.charCodeAt(0) - _beg; return String.fromCharCode((_c+na[_cnt++%_sz])%_len + _beg); }); }; })(); // // 解密:字符码在字符集内平移-恢复。 // String.prototype._unshift = (function() { var _cset, _id, _beg, _len, _exp; return function( na, cset ) { switch (typeof cset) { case 'undefined': cset = 'cjk'; case 'string': _cset = (cset == _id) ? null : _Charset[cset]; break; default: _cset = cset; } if ( _cset ) { _beg = parseInt(_cset[0].substring(1), 16); _len = parseInt(_cset[1].substring(1), 16) - _beg + 1; _exp = RegExp('[\\' + _cset[0] + '-\\' + _cset[1] + ']', 'g'); _id = cset; } var _sz = na.length, _cnt = 0; return this.replace(_exp, function(s) { var _c = s.charCodeAt(0) - _beg; return String.fromCharCode((_c-na[_cnt++%_sz]%_len+_len)%_len + _beg); }); }; })(); })();
用法:
<script language="JavaScript"> var _str = "中文字符串和 English char string 的 JS 加密 Test. 包含一些标点符号,*@%! 等。"; var _k1 = [2034,85,45,22,65,213,65,398,356,1709,354]; var _enc = _str._shift(_k1); alert(_enc); alert(_enc._unshift(_k1)); </script>
密钥是个数组,如果觉得不方便,当然可以用一句话,取每个字符的码值分解成数组了。
(待续……)
评论
2 楼
cuixiping
2011-01-24
不错的思路。简单有效。加密要求不太高的环境下很适合。
1 楼
Liner
2011-01-22
几个针对特定字符环境的特化版:
// // alnum 特化版-加密 // 字符集: // [0-9a-zA-Z] = 英文字母(大小写) + 数字 // String.prototype._shift_en = function( na ) { var _sz = na.length, _cnt = 0; return this.replace(/[0-9a-zA-Z]/g, function(s) { var _n = s.charCodeAt(0), _beg = 0x41, _len = 26; if (_n >= 0x61) { _beg = 0x61; } else if (_n < 0x41) { _beg = 0x30; _len = 10; } var _c = _n - _beg; return String.fromCharCode((_c+na[_cnt++%_sz])%_len + _beg); }); }; // // alnum 特化版-解密 // String.prototype._unshift_en = function( na ) { var _sz = na.length, _cnt = 0; return this.replace(/[0-9a-zA-Z]/g, function(s) { var _n = s.charCodeAt(0), _beg = 0x41, _len = 26; if (_n >= 0x61) { _beg = 0x61; } else if (_n < 0x41) { _beg = 0x30; _len = 10; } var _c = _n - _beg; return String.fromCharCode((_c-na[_cnt++%_sz]%_len+_len)%_len + _beg); }); }; // // 汉语文字环境特化版-加密 // 字符集: // [0-9a-zA-Z\u4e00-\u9fa5] = CJK 统一汉字 + 英文字母(大小写) + 数字 // String.prototype._shift_zh = function( na ) { var _sz = na.length, _cnt = 0; return this.replace(/[0-9a-zA-Z\u4e00-\u9fa5]/g, function(s) { var _n = s.charCodeAt(0), _beg = 0x41, _len = 26; if (_n >= 0x4e00) { _beg = 0x4e00; _len = 20902; } else if (_n >= 0x61) { _beg = 0x61; } else if (_n < 0x41) { _beg = 0x30; _len = 10; } var _c = _n - _beg; return String.fromCharCode((_c+na[_cnt++%_sz])%_len + _beg); }); }; // // 汉语文字环境特化版-解密 // String.prototype._unshift_zh = function( na ) { var _sz = na.length, _cnt = 0; return this.replace(/[0-9a-zA-Z\u4e00-\u9fa5]/g, function(s) { var _n = s.charCodeAt(0), _beg = 0x41, _len = 26; if (_n >= 0x4e00) { _beg = 0x4e00; _len = 20902; } else if (_n >= 0x61) { _beg = 0x61; } else if (_n < 0x41) { _beg = 0x30; _len = 10; } var _c = _n - _beg; return String.fromCharCode((_c-na[_cnt++%_sz]%_len+_len)%_len + _beg); }); }; // // 中文环境字符特化版-加密 // 字符集: // [\u0020-\u007e\u4e00-\u9fa5] = CJK 统一汉字 + ASCII 常规字符 // 注: // \u0020 = 空格,\u007e = ~ // String.prototype._shift_chs = function( na ) { var _sz = na.length, _cnt = 0; return this.replace(/[\u0020-\u007e\u4e00-\u9fa5]/g, function(s) { var _n = s.charCodeAt(0), _beg = 0x20, _len = 95; if (_n >= 0x4e00) { _beg = 0x4e00; _len = 20902; } var _c = _n - _beg; return String.fromCharCode((_c+na[_cnt++%_sz])%_len + _beg); }); }; // // 中文环境字符特化版-解密 // String.prototype._unshift_chs = function( na ) { var _sz = na.length, _cnt = 0; return this.replace(/[\u0020-\u007e\u4e00-\u9fa5]/g, function(s) { var _n = s.charCodeAt(0), _beg = 0x20, _len = 95; if (_n >= 0x4e00) { _beg = 0x4e00; _len = 20902; } var _c = _n - _beg; return String.fromCharCode((_c-na[_cnt++%_sz]%_len+_len)%_len + _beg); }); };
发表评论
-
一个类似 Base64 但真正实现了加密的 JS 文字加密算法
2011-02-16 15:11 3003算法的基本原理和 Base64 ... -
针对文字加密的简单 JS 加密算法 --进制乱序法改良版
2011-02-12 12:08 5632在上一篇文章《普通 http 网络下数据的安全传输(设计原理) ... -
普通 http 网络下数据的安全传输(设计原理)
2011-02-10 16:32 7871曾几何时,https 安全但 ... -
近乎完美的简单 JS 跨域解决方式 --window.name
2011-02-04 22:47 26027当然,“近乎完美”仅仅是个人观点,但如下所述,它确实简单而颇有 ... -
几个文字加密的 JS 简洁算法(续2)--进制乱序法
2011-01-31 22:44 2362续前一篇博文《几个文字加密的简洁算法和一些个人的想法》——字符 ... -
几个文字加密的 JS 简洁算法(续)-- 字符错位法
2011-01-26 12:28 3810续上一篇博文《几个文字加密的简洁算法和一些个人的想法》,不说开 ... -
几个文字加密的简洁算法和一些个人的想法
2011-01-22 21:34 0未深入了解过数据加密 ... -
优化PHP执行效率的40条技巧
2009-11-08 21:37 24801.如果一个方法能被静 ... -
姓氏排序程序 Js 版(小程序共享)
2009-10-19 10:02 1860一朋友给客户做类似黄 ... -
最简单的判断 Javascript 和 Cookie 是否禁用的代码
2009-10-09 12:10 992在服务器端 include 即可,如 PHP: include ... -
对 XSS 跨站攻击之所以存在的一些思考
2009-09-21 23:07 1320一直对漏洞、骇客、攻击之类的东西没敢深入,甚至肤浅的了解都算不 ... -
标准的字根输入法设想
2009-04-30 20:44 1475国家新版《汉字部首表》即将于5月1日发布,其中:主部首 2 ... -
普通 http 下可靠的网路认证方式
2009-04-01 21:41 1328认证过程: 服务器:对客户端的每次请求,每一次都生成 ... -
在IIS中用ISAPI_Rewrite Lite版配置虚拟主机支持二级域名
2007-10-23 11:49 3201为二级域名的问题搞了2天,狂郁闷。。。。先是用程序,感觉太累赘 ... -
在Apache中配置使用Asp.net(记录备忘共享)
2007-10-17 14:38 4846本来是出于好奇,Apache中居然也能支持Asp一把了。。。呵 ... -
学写一个程序开发框架(PHP),灵感来源于ROR
2007-08-30 12:20 2544先向各位高手们请个安。 我对ROR的了解很浅,仅仅是看了一遍它 ... -
盗站与采集,分析及反制之术PHP实现
2007-08-10 23:53 3559一般的说,只要做过站 ... -
具有xhr对象管理功能的Ajax简易封装(Majax)
2007-07-20 21:57 3351内部由一个数组缓存工作中的xhr对象,类似于“池”,当一个请求 ... -
一个极简化的Ajax封装,回调接口和浏览器兼容性较好
2007-06-23 22:58 9528>>注意:请下载后面(9楼)的v1.1正式版。如果 ... -
我的汉字输入法编码方案
2007-05-28 22:24 2655很早就有了这个东西,因为一直没学会编写输入法程序,所以就没有拿 ...
相关推荐
本文将深入探讨两个常见的对称加密算法:AES(高级加密标准)和BlowFish,并结合Qt框架介绍如何实现它们的加密和解密功能。同时,我们将讨论如何将这些算法封装成动态库以便于使用。 AES(Advanced Encryption ...
js中对字符串加密解密算法
移位算法在信息安全领域是一种常见的加密技术,它基于字符或数据块的位移操作来实现信息的隐藏。这种算法简单易懂,但也因为其相对简单的性质,可能在安全性上不如其他高级加密标准如AES(高级加密标准)或RSA。本文...
主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下
国密算法sm4,可加密数据支持中英文特殊字符,可加密文件或字符串,支持cbc和ecb模式
使用 C++ 设计编写符合 DES 算法思想的加、解密程序,能够实现对字符串和数组的加密和解密。该程序将明文转换为 64 位的二进制编码,然后使用 DES 算法对其进行加密或解密。 DES 算法特点 DES 算法的保密性仅取决...
移位加密解密算法是一种简单但历史悠久的加密技术,它基于字符或数据块的移位操作来实现信息的隐藏。在本课程设计中,我们将深入探讨这种算法的原理及其在Visual C++ 6.0环境下的实现。密码学是一门研究加密与解密...
在“加密算法实现字符串的加密”这一主题中,我们可以关注几种常见的加密算法: 1. 对称加密:在这种方法中,加密和解密使用相同的密钥。例如,DES(Data Encryption Standard)和AES(Advanced Encryption ...
某软件公司要开发一个数据加密模块,可以对字符串进行加密。最简单的加密算法通过对字母进行移位来实现,同时提供了稍复杂的逆向输出加密,还提供了更加高级的求模加密。用户先使用简单的加密算法对字符串进行加密,...
在这个"移位加密算法的Java实现"中,我们将探讨如何使用Java编程语言来构建一个可以实现加密和解密功能的程序。 首先,我们需要了解移位加密的基本原理。在最简单的 Caesar 密码中,每个字符都会向右(或向左)移动...
在给定的标题和描述中提到的“文件加密算法,主要用来加密文本文件,对字符串进行加密”,这通常涉及到对文本内容的逐字节或字符的操作。对于文本文件,我们可以使用对称加密算法,如AES(高级加密标准)、DES(数据...
自己写的java实现的置换加密算法,信息安全课程上机实验,欢迎大家下载
### C#中使用DES算法加密字符串为定长字符串的方法及代码实现 #### 知识点概述 本文档主要介绍了在C#编程语言中使用DES算法进行字符串加密的具体方法,并提供了完整的代码实现示例。文档中所提到的代码通过.NET...
本示例将深入探讨一个简单的C#字符串加密算法,这对于初学者理解加密原理和实践是非常有帮助的。 字符串加密的基本思想是将明文字符串转化为密文,这样即使数据被截取,也无法直接读取其内容。常见的加密方法包括...
在这个场景中,我们将探讨如何使用jQuery结合MD5和SHA1算法进行字符串加密。 MD5(Message-Digest Algorithm 5)和SHA1(Secure Hash Algorithm 1)都是常见的哈希函数,它们可以将任意长度的数据转化为固定长度的...
在IT领域,安全性和数据保护是至关重要的,而加密技术是保障这些方面的重要手段之一。SHA-256(Secure Hash Algorithm 256位)是一种广泛使用的密码散列函数,能够将任意长度的输入转化为固定长度的摘要,通常用于...
移位密码算法实现中,首先需要创建一个 Shift 类,其中包含两个静态函数encryption 和 decryption,用于加密和解密。 加密过程中,首先从文件中读取明文字符,然后将其与移位数字 k 相加,取模 n,得到密文字符。...
一个简单的字符串加密解密算法,使用C#语言实现。。。
MD5加密 32位加密字符串 MD5加密 32位加密字符串 MD5加密 32位加密字符串
使用这些方法时,你需要提供一个字符串和对应的密钥,加密方法会返回加密后的字节数组,解密方法则将加密字节数组还原为原始字符串。 总结来说,`JAVA可逆带秘钥字符串加密算法`主要涉及到对称加密,特别是DES算法...