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


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 相关文章推荐
IE滤镜与CSS3效果(详细整理分享)
Jan 25 HTML / CSS
纯CSS3发光分享按钮的实现教程
Sep 06 HTML / CSS
详解CSS3中@media的实际使用
Aug 04 HTML / CSS
利用CSS3的线性渐变linear-gradient制作边框的示例
Jun 02 HTML / CSS
HTML5 Plus 实现手机APP拍照或相册选择图片上传功能
Jul 13 HTML / CSS
HTML5新增的标签和属性归纳总结
May 02 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
Jan 04 HTML / CSS
HTML5实现晶莹剔透的雨滴特效
May 14 HTML / CSS
探索HTML5本地存储功能运用技巧
Mar 02 HTML / CSS
深入解析HTML5 Canvas控制图形矩阵变换的方法
Mar 24 HTML / CSS
CSS预处理框架——Stylus
Apr 21 HTML / CSS
HTML中的表单Form实现居中效果
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
《Re:从零开始的异世界生活 冰结之绊》
2020/04/09 日漫
PHP对字符串的递增运算分析
2010/08/08 PHP
PHP中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
可插入图片的TEXT文本框
2013/12/27 Javascript
JavaScript ES6中CLASS的使用详解
2016/11/22 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
wxPython中listbox用法实例详解
2015/06/01 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
pandas的qcut()方法详解
2019/07/06 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
Django继承自带user表并重写的例子
2019/11/18 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
小学生安全保证书
2014/02/01 职场文书
服务承诺书格式
2014/05/21 职场文书
音乐教师求职信
2014/06/28 职场文书