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


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动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
Aug 18 HTML / CSS
CSS3动画animation实现云彩向左滚动
May 09 HTML / CSS
CSS3+Sprite实现僵尸行走动画特效源码
Jan 27 HTML / CSS
CSS3实现渐变背景兼容问题
May 06 HTML / CSS
CSS3中引入多种自定义字体font-face
Jun 12 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
Jan 31 HTML / CSS
HTML5实现获取地理位置信息并定位功能
Apr 25 HTML / CSS
使用分层画布来优化HTML5渲染的教程
May 08 HTML / CSS
Html5新增了哪些功能
Apr 16 HTML / CSS
教你做个可爱的css滑动导航条
Jun 15 HTML / CSS
CSS 一行代码实现头像与国旗的融合
Oct 24 HTML / CSS
HTML5之高度塌陷问题的解决
Jun 01 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
关于PHP中Object对象的笔记分享
2011/06/28 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
图片自动缩小 点击放大
2008/07/07 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
nodejs提示:cross-device link not permitted, rename错误的解决方法
2019/06/10 NodeJs
javascript中的this作用域详解
2019/07/15 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
python批量修改文件编码格式的方法
2018/05/31 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
python 字段拆分详解
2019/12/17 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
python常用运维脚本实例小结
2020/02/14 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
中间件分为哪几类
2016/09/18 面试题
留学自荐信的技巧
2013/10/17 职场文书
幼儿师范毕业生自荐信
2013/11/09 职场文书
航空大学应届生求职信
2013/11/10 职场文书
商务日语毕业生自荐信
2013/11/23 职场文书
应届专科生个人的自我评价
2014/01/05 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
2021/06/07 Python
JS中如何优雅的使用async await详解
2021/10/05 Javascript