一张图片能隐含千言万语之隐藏你的程序代码


Posted in HTML / CSS onDecember 13, 2012

我最近开发了我的第一个网页游戏:一个HTML5的视频智力游戏。开发的过程很有趣,我喜欢编程,但当实现了游戏逻辑后,我有了一个有趣的想法:为什么不想个办法把代码隐藏起来?起初我想到的是一些很简单的做法,比如禁止上下文菜单,以防右键点击时可以查看页面源代码。但这毫无意义,右键菜单不能用,人们仍然可以通过键盘快捷键或菜单栏里的“查看源文件”来观看源代码。

一张图片能隐含千言万语

这依赖于图片的体积。但我决定要把源代码加密存放到一张图片里。HTML5的画布(canvas)组件很适合干这种事情,因为它支持针对图像像素的操作。一个像素由四个值(通道)来表示:红,绿,蓝和alpha通道。它们的值的分布范围是从0到255。我的Javascript代码就是一个个的字符,每个字符都有一个ASCII对应值。ASCII值的范围也是0-255,所以,我想做的是,遍历画布上的每个像素,给每个像素设置3个代码字符的ASCII值作为它的RGB值,你可以通过charCodeAt函数轻松的取出这些字符。

复制代码
代码如下:

.charCodeAt(0)

生成的是一张色彩斑斓、很小的图片,它就是我的程序代码看看吧:

解码的时候,我只需要把这个图片画到画布上,遍历像素点,取出r,g,b值所代表的字符:

复制代码
代码如下:

String.fromCharCode(code)

把它们连接成一个大的字符串,这就是你的代码了——可执行的代码。

这样就能保护你的源代码了吗?

其实不能——一个有经验的(甚至没有经验的)程序员仍然能够知道如何去解码图片,取出里面的代码,但我想这是能防止那些怀着不良商业目的人偷盗你的的代码的第一步措施——而那些能够想出如何解码的程序员(大部分)都不是来剽窃的

这种方法的主要缺陷
这种技术只能应用在支持HTML5画布(canvas)技术的现代浏览器里,IE6、IE8 里肯定是不行的。甚至有些现代的浏览器对于图片的alpha通道的编码也有支持问题,所以,每个像素点你只能放3个字符——一个100×100大小的图片可以存放3万个文本字符。

你还有其它简单的能防止别人拷贝你的代码的方法吗?我们当然可以把字符进行加密,但如何保证你的解密步骤能不被人轻易的破解呢?告诉我你的想法吧!

HTML / CSS 相关文章推荐
HTML5 CSS3给网站设计带来出色效果
Jul 16 HTML / CSS
html5+css3之CSS中的布局与Header的实现
Nov 21 HTML / CSS
简单总结CSS3中视窗单位Viewport的常见用法
Feb 04 HTML / CSS
CSS3不透明度实例讲解
Apr 26 HTML / CSS
css3加js做一个简单的3D行星运转效果实例代码
Jan 18 HTML / CSS
css3 矩阵的使用详解
Mar 20 HTML / CSS
CSS3实现淘宝留白的方法
Jun 05 HTML / CSS
使用html5新特性轻松监听任何App自带返回键的示例
Mar 13 HTML / CSS
canvas实现漂亮的下雨效果的示例
Apr 18 HTML / CSS
纯html+css实现奥运五环的示例代码
Aug 02 HTML / CSS
CSS+HTML 实现顶部导航栏功能
Aug 30 HTML / CSS
POST提交数据常见的四种方式
Jan 18 HTML / CSS
HTML5 新旧语法标记对我们有什么好处
Dec 13 #HTML / CSS
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
Dec 13 #HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
Dec 09 #HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
Dec 09 #HTML / CSS
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
Dec 07 #HTML / CSS
html5-websocket基于远程方法调用的数据交互实现
Dec 04 #HTML / CSS
HTML5 Canvas像素处理使用接口介绍
Dec 02 #HTML / CSS
You might like
用文本文件制作留言板提示(下)
2006/10/09 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
JQuery 常用方法基础教程
2009/02/06 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
详解使用vscode+es6写nodejs服务端调试配置
2017/09/21 NodeJs
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python中文件I/O高效操作处理的技巧分享
2017/02/04 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
Numpy数组的保存与读取方法
2018/04/04 Python
python 堆和优先队列的使用详解
2019/03/05 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
数据库面试要点基本概念
2013/10/31 面试题
电子商务自荐书范文
2014/01/04 职场文书
个人授权委托书
2014/04/03 职场文书
如何书写邀请函?
2019/06/24 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
MySQL数据库实验之 触发器和存储过程
2022/06/21 MySQL