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


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 相关文章推荐
详解CSS样式中的 !important * _ 符号
Mar 09 HTML / CSS
CSS3弹性盒模型开发笔记(一)
Apr 26 HTML / CSS
CSS书写规范、顺序和命名规则
Mar 06 HTML / CSS
css3的transition属性详解
Dec 15 HTML / CSS
HTML5 placeholder属性详解
Jun 22 HTML / CSS
详解Canvas事件绑定
Jun 27 HTML / CSS
在HTML5 canvas里用卷积核进行图像处理的方法
May 02 HTML / CSS
Canvas 文本转粒子效果的实现代码
Feb 14 HTML / CSS
html5 桌面提醒:Notifycations应用介绍
Nov 27 HTML / CSS
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
Jan 06 HTML / CSS
HTML5之SVG 2D入门4—笔画与填充
Jan 30 HTML / CSS
深入了解canvas在移动端绘制模糊的问题解决
Apr 30 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
两个强悍的php 图像处理类1
2009/06/15 PHP
初识PHP
2014/09/28 PHP
php图像处理类实例
2015/07/28 PHP
laravel自定义分页效果
2017/07/23 PHP
jQuery插件开发全解析
2012/10/10 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
jQuery简单获取DIV和A标签元素位置的方法
2017/02/07 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
BootStrap模态框不垂直居中的解决方法
2017/10/19 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
python简单实现基数排序算法
2015/05/16 Python
python数据结构之图的实现方法
2015/07/08 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
python pytest进阶之fixture详解
2019/06/27 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
彪马加拿大官网:PUMA加拿大
2018/10/04 全球购物
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
怎样从/向数据文件读/写结构
2014/11/23 面试题
学校安全防火方案
2014/06/07 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
2015中学教学工作总结
2015/07/22 职场文书
大学生受助感言
2015/08/01 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
alibaba seata服务端具体实现
2022/02/24 Java/Android
vue特效之翻牌动画
2022/04/20 Vue.js
python开发制作好看的时钟效果
2022/05/02 Python