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


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 相关文章推荐
不同浏览器对CSS3和HTML5的支持状况
Oct 31 HTML / CSS
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
Mar 16 HTML / CSS
关于box-sizing的全面理解
Jul 28 HTML / CSS
CSS3实现div从下往上滑入滑出效果示例
Apr 28 HTML / CSS
CSS3只让背景图片旋转180度的实现示例
Mar 09 HTML / CSS
你可能不熟练的十个前端HTML5经典面试题
Jul 03 HTML / CSS
HTML5的语法变化介绍
Aug 13 HTML / CSS
字中字效果的实现【html5实例】
May 03 HTML / CSS
html5如何在Canvas中实现自定义路径动画示例
Sep 18 HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
Jan 22 HTML / CSS
css animation配合SVG制作能量流动效果
Mar 24 HTML / CSS
浅谈由position属性引申的css进阶讨论
May 25 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
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
实例讲解php实现多线程
2019/01/27 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
javascript高级学习笔记整理
2011/08/14 Javascript
基于jQuery的简单九宫格实现代码
2012/08/09 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
python中open函数的基本用法示例
2019/09/07 Python
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
文科生自我鉴定
2014/02/15 职场文书
公司请假条范文
2014/04/11 职场文书
小学感恩教育活动总结
2014/07/07 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
乡镇党的群众路线教育实践活动总结报告
2014/10/30 职场文书
导游词之韩国济州岛
2019/10/28 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers
python 制作一个gui界面的翻译工具
2021/05/14 Python
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL
python神经网络学习 使用Keras进行简单分类
2022/05/04 Python