这是什么解密方法?

时间:2009-10-29 16:23:22

标签: actionscript encryption

此函数是用ActionScript编写的。这是什么样的解密? PHP中是否存在此函数的现有函数?

function decrypt(str, key1, key2) {
  var v1 = [];
  var v3 = 0;
  while (v3 < str.length) {
    switch (str.charAt(v3)) {
      case '0':
        v1.push('0000');
        break;
      case '1':
        v1.push('0001');
        break;
      case '2':
        v1.push('0010');
        break;
      case '3':
        v1.push('0011');
        break;
      case '4':
        v1.push('0100');
        break;
      case '5':
        v1.push('0101');
        break;
      case '6':
        v1.push('0110');
        break;
      case '7':
        v1.push('0111');
        break;
      case '8':
        v1.push('1000');
        break;
      case '9':
        v1.push('1001');
        break;
      case 'a':
        v1.push('1010');
        break;
      case 'b':
        v1.push('1011');
        break;
      case 'c':
        v1.push('1100');
        break;
      case 'd':
        v1.push('1101');
        break;
      case 'e':
        v1.push('1110');
        break;
      case 'f':
        v1.push('1111');
    }
    ++v3;
  }
  v1 = (v1.join('')).split('');
  var v6 = [];
  v3 = 0;
  while (v3 < 384) {
    key1 = (key1 * 11 + 77213) % 81371;
    key2 = (key2 * 17 + 92717) % 192811;
    v6[v3] = (key1 + key2) % 128;
    ++v3;
  }
  v3 = 256;
  while (v3 >= 0) {
    var v5 = v6[v3];
    var v4 = v3 % 128;
    var v8 = v1[v5];
    v1[v5] = v1[v4];
    v1[v4] = v8;
    --v3;
  }
  v3 = 0;
  while (v3 < 128) {
    v1[v3] ^= v6[v3 + 256] & 1;
    ++v3;
  }
  var v12 = v1.join('');
  var v7 = [];
  v3 = 0;
  while (v3 < v12.length) {
    var v9 = v12.substr(v3, 4);
    v7.push(v9);
    v3 += 4;
  }
  var v2 = [];
  v3 = 0;
  while (v3 < v7.length) {
    switch (v7[v3]) {
      case '0000':
        v2.push('0');
        break;
      case '0001':
        v2.push('1');
        break;
      case '0010':
        v2.push('2');
        break;
      case '0011':
        v2.push('3');
        break;
      case '0100':
        v2.push('4');
        break;
      case '0101':
        v2.push('5');
        break;
      case '0110':
        v2.push('6');
        break;
      case '0111':
        v2.push('7');
        break;
      case '1000':
        v2.push('8');
        break;
      case '1001':
        v2.push('9');
        break;
      case '1010':
        v2.push('a');
        break;
      case '1011':
        v2.push('b');
        break;
      case '1100':
        v2.push('c');
        break;
      case '1101':
        v2.push('d');
        break;
      case '1110':
        v2.push('e');
        break;
      case '1111':
        v2.push('f');
    }
    ++v3;
  }
  return v2.join('');
}

2 个答案:

答案 0 :(得分:1)

这是megavideo的链接解密代码。许多人已经把它移植到PHP - 只是google for it。

答案 1 :(得分:0)

看起来它将十六进制值转换为单字节二进制值并将它们推送到堆栈中(尽管这些值可能实际上并不存储为单个字节。)然后有第二个case语句执行反向操作。

还有一些加扰或解扰(乘以指定值加上指定的数字,然后是模块化除法);传入的字符串。使用finally模块128操作,连接的字符串看起来像是有人返回有效的ASCII代码,根据连接的字符串的散列值写入磁盘。虽然,在我看来,你可能会遇到很多碰撞;但也许不是。我想如果原始数据集只包含ASCII值,它可能会运行良好。