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

数据加密

阅读更多

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

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

“加密”嘛,顾名思义,基本就是要别人看不明白本来可以明白的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. 原文长度必须不小于密钥长度。  
分享到:
评论

相关推荐

    网站 数据传送 数据库-数据加密技术

    数据加密技术是网络安全的核心组成部分,尤其对于电子商务网站和各类数据库来说,确保数据的安全传输和存储至关重要。本章主要探讨了数据加密的相关概念和技术,包括数据加密标准、公钥密码算法、密钥管理以及加密...

    POST提交数据加密

    下面我们将深入探讨POST提交数据加密的原理、方法以及HttpWatch工具的使用。 首先,POST方法是HTTP协议中用于向服务器发送数据的一种方式,通常用于表单提交。为了防止数据在传输过程中被窃取或篡改,我们通常会对...

    SJL05金融数据加密机手册.doc

    SJL05系列金融数据加密机是国内率先通过国家密码管 理办公室鉴定的基于金融业务主机的应用层数据加密机,主要用于数据加密、消息来源正确性验证、密钥 管理等,为计算机网络系统提供安全保密数据通信服务,防止网上的...

    数据加密与数字签名系统

    数据加密与数字签名系统是信息安全领域中的核心技术,用于保护数据的隐私性和完整性,以及验证信息来源的可靠性。在本文中,我们将深入探讨这两个概念及其在C++编程中的应用。 首先,我们来理解数据加密。数据加密...

    数据加密机使用手册

    数据加密机使用手册 数据加密机使用手册是介绍主流数据加密机操作步骤、页面配置等内容的详细手册。本手册将指导用户如何正确地使用数据加密机,确保数据的安全性。 1. 操作流程图 数据加密机的操作流程图主要包括...

    PCI数据加密技术与应用 PCI数据加密技术与应用

    PCI(Payment Card Industry)数据加密技术是金融交易和电子商务领域中的关键安全标准,它涉及到信用卡和其他支付卡信息的安全处理和存储。本主题将深入探讨PCI数据加密技术的原理、实施方法以及其在实际应用中的...

    数据加密技术.pdf

    数据加密技术是保护数据安全的关键方法之一,尤其是在网络资源广泛共享的今天,数据加密成为了确保信息不被未经授权的访问、窃取或篡改的重要手段。本文档“数据加密技术.pdf”深入探讨了数据加密的基本原理、常用...

    数据加密模块代码和类图.zip

    某软件公司要开发一个数据加密模块,可以对字符串进行加密。最简单的加密算法通过对字母进行移位来实现,同时提供了稍复杂的逆向输出加密,还提供了更加高级的求模加密。用户先使用简单的加密算法对字符串进行加密,...

    JAVA数据加密解密的实例

    本实例将聚焦于JAVA数据加密解密的实践应用。 首先,让我们理解加密和解密的基本概念。加密是一种将明文(可读信息)转化为密文(不可读信息)的过程,以保护数据不被未经授权的用户访问。解密则是加密的逆过程,将...

    spring(tomcat)前后端数据加密传输demo

    本示例项目"spring(tomcat)前后端数据加密传输demo"提供了一个基于Spring Boot和Tomcat环境的解决方案,用于演示如何实现前后端数据的加密传输。以下是这个项目中涉及的关键知识点: 1. **Spring Boot**: Spring ...

    【数据安全】Oracle 透明数据加密(TDE) 完整操作手册

    Oracle 透明数据加密(TDE)是Oracle数据库提供的一种安全特性,用于保护敏感数据免受未经授权的访问。TDE能够对存储在特定列或整个表空间中的数据进行加密,确保即使数据文件被盗,数据仍保持安全。以下是关于TDE的...

    计算机网络通信安全数据加密技术研究-计算机网络-计算机.pdf

    计算机网络通信安全数据加密技术研究 计算机网络通信安全数据加密技术是现代信息技术的重要组成部分,旨在保护网络通信的安全性。随着网络安全问题的不断出现,数据加密技术作为一种安全性能较高的数据保护技术被...

    delphi数据加密技术

    在IT行业中,数据加密技术是保护信息安全的重要手段。在Delphi编程环境中,开发人员可以利用各种加密库和算法来确保敏感数据的安全性。本篇文章将深入探讨Delphi数据加密技术,包括基本概念、常用加密算法以及如何在...

    数据加密标准des及公开密钥密码体制

    数据加密是网络安全领域中的核心组成部分,它通过特定的算法将原始数据转化为无法识别的形式,以保护数据免受未经授权的访问。本文将详细讨论两种主要的加密类型:数据加密标准DES和公开密钥密码体制。 1. 数据加密...

    云计算安全之数据加密.pdf

    云计算安全中的数据加密技术是确保数据在云计算环境中的安全存储、传输和处理的关键手段。随着云计算技术在各行各业的广泛应用,数据安全问题日益凸显,成为云计算发展过程中不容忽视的焦点。本文将探讨云计算环境下...

    基于oracle数据库的敏感数据加密应用研究.pdf

    【基于Oracle数据库的敏感数据加密应用研究】 随着信息化时代的快速发展,信息系统在经济活动和社会生活中扮演着不可或缺的角色。然而,伴随着这种依赖性的增加,信息安全问题变得日益突出,特别是敏感数据的安全...

    JAVA数据加密jar包之sunjce_provider.rar

    这个压缩包`JAVA数据加密之sunjce_provider.rar`显然提供了关于如何在Java环境中使用`sunjce_provider`进行数据加密的资源。 首先,让我们了解什么是加密。加密是一种将明文(可读数据)转换为密文(不可读数据)的...

    VB052-数据加密技术 源代码

    数据加密技术是信息安全领域中的核心组成部分,主要用于保护信息的隐私性和完整性。VB052-数据加密技术源代码集合可能包含了一系列使用Visual Basic编程语言实现的加密算法和相关功能的实例。下面我们将深入探讨数据...

Global site tag (gtag.js) - Google Analytics