当前位置:软件学习 > Flash >>

Flash本地加密

首先我们来假设一个情况。

  我们要做一个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 = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);    a = safe_add(a, olda);    b = safe_add(b, oldb);    c = safe_add(c, oldc);    d = safe_add(d, oldd);  }  return Array(a, b, c, d);}function md5_cmn(q, a, b, x, s, t){  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);}function md5_ff(a, b, c, d, x, s, t){  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);}function md5_gg(a, b, c, d, x, s, t){  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);}function md5_hh(a, b, c, d, x, s, t){  return md5_cmn(b ^ c ^ d, a, b, x, s, t);}function md5_ii(a, b, c, d, x, s, t){  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);}function core_hmac_md5(key, data){  var bkey = str2binl(key);  if(bkey.length > 16) bkey = core_md5(bkey, key.length * strsize);  var ipad = Array(16), opad = Array(16);  for(var i = 0; i <

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,