2009-10-29 8 views
0

이 함수는 ActionScirpt로 작성됩니다. 이것이 어떤 종류의 해독입니까? 이 함수에 대해 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

이 (. 그 값은 아마 실제로 단일 바이트로 저장되지 않더라도)는 단일 바이트 이진 값을 16 진수 값을 변환하고 스택에 그들을 밀어처럼 보인다 그리고 다음 역 동작을하는 두 번째 경우 문이있다 .

일부 스크램블 또는 언 스크램블링 (지정된 값을 더한 다음 지정된 수를 더한 다음 모듈 분할을 곱함)도 있습니다. finally 모듈 128 연산을 사용하면 조인 된 문자열은 합법적 인 ASCII 코드를 반환하는 누군가가 조인 된 문자열의 해시 된 값을 기반으로 디스크에 쓰는 것처럼 의심스러운 것처럼 보입니다. 그것은, 당신이 그것을하는 많은 충돌을 얻을 것 같아요. 하지만 그렇지 않을 수도 있습니다. 원래 데이터 세트에 ASCII 값만 포함되어 있으면 잘 작동한다고 생각합니다.

1

이것은 megavideo의 링크 암호 해독 코드입니다. 많은 사람들이 그것을 PHP로 포팅했습니다.

+0

당신은 틀린 품목입니다. 링크는 다음과 같습니다. http://userscripts.org/scripts/review/42944 스트리밍 비디오 및 광고 제거에 매우 특정한 용도가 있습니다. – Cynthia