注册
 找回密码
 注册
江西广告网
查看: 162|回复: 0
打印 上一主题 下一主题

Flash本地加密

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2009-1-2 11:29:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
首先我们来假设一个情况。   我们要做一个flash,里面存了一段话,只想给知道密码的人看。通常的做法是检测用户的输入是否等于密码,然后显示。但是由于Flash是开放结构,所以swf文件可以反汇编然后看到密码,这时候就可以非法的看到要保护的东西了。   但是如果通过一个不可逆的算法把密码加密,然后存在swf里面。然后把用户输入的密码也同样加密,然后比对加密以后的字串是否相等就可以了。因为swf里面保存的密码是不可逆的嘛""   不可逆的加密算法有很多种,最流行的就是md系列了,现在的是md5。md5可以计算认可字串的特征,然后归结到一个32字节长的字串里面,源字串一点点的改动就会造成特称字串巨大的变化。   据个例子:   "abc"的md5是900150983cd24fb0d6963f7d28e17f72   "abb"的md5是ea01e5fd8e4d8832825acdd20eac5104   为什么说不可逆呢?   据个例子   问题:1000是由什么数字相加而成的呢?   答案是不知道"   如果说是两个数字,那么我们可以有1 999或者500 500或者……但是三个、四个、直到n个数字呢?也就是说我们不可能知道原来的数字是什么,猜中的机会很小。而md5也是同样的原理,将每个字符的特征值相加再相加,自然就很难猜到原来是什么东西了"   那么我们有了密码检测了"着时候需要一个可逆的加密算法来处理我们要保存的东西,因为要还原嘛""这类算法很多,我选择了较流行的des算法   des函数的定义是这样的   des ("密码", "加密文本", 模式)   模式=1的时候,des返回加密后的值   模式=0的时候,des返回解密后的值   但是由于des返回的值不一定是通用字符集里面的,所以我就做了一点处理,将des的值转成16进制字串,防止错误的产生。   道理很明白了,怎么用呢""首先,我们来创建密码的md5值,使用下面的函数: [color=#6495ED[B]]/*E-mail: tsxy@21cn.comMoon.Blue*/var hexcase = 0;var b64pad = "";var strsize = 8; function md5(s){ return binl2hex(core_md5(str2binl(s), s.length * strsize));}function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * strsize));}function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * strsize));}function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }function core_md5(x, len){ x[len >> 5] |= 0x80 << ((len) % 32); x[(((len 64) >>> 9) << 4) 14] = len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for(var i = 0; i < x.length; i = 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d; a = md5_ff(a, b, c, d, x[i 0], 7 , -680876936); d = md5_ff(d, a, b, c, x[i 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i 2], 17, 606105819); b = md5_ff(b, c, d, a, x[i 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i 4], 7 , -176418897); d = md5_ff(d, a, b, c, x[i 5], 12, 1200080426); c = md5_ff(c, d, a, b, x[i 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i 8], 7 , 1770035416); d = md5_ff(d, a, b, c, x[i 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i 10], 17, -42063); b = md5_ff(b, c, d, a, x[i 11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i 12], 7 , 1804603682); d = md5_ff(d, a, b, c, x[i 13], 12, -40341101); c = md5_ff(c, d, a, b, x[i 14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i 15], 22, 1236535329); a = md5_gg(a, b, c, d, x[i 1], 5 , -165796510); d = md5_gg(d, a, b, c, x[i 6], 9 , -1069501632); c = md5_gg(c, d, a, b, x[i 11], 14, 643717713); b = md5_gg(b, c, d, a, x[i 0], 20, -373897302); a =
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表