2017-02-15 8 views
0

興味深いJavascript関数でiframeコードを暗号化するストリーミングWebサイトが見つかりました。ウェブページ上では暗号化機能ではなく(明らかに)復号化機能が見えます。これは、関数である:Python - 既知の解読関数のJavascript暗号化関数

function base64_decode(data) { 
    var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/='; 
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, 
     ac = 0, 
     dec = '', 
     tmp_arr = []; 
    if (!data) { 
     return data; 
    } 
    data += ''; 
    do { 
     h1 = b64.indexOf(data.charAt(i++)); 
     h2 = b64.indexOf(data.charAt(i++)); 
     h3 = b64.indexOf(data.charAt(i++)); 
     h4 = b64.indexOf(data.charAt(i++)); 
     bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; 
     o1 = bits >> 16 & 0xff; 
     o2 = bits >> 8 & 0xff; 
     o3 = bits & 0xff; 
     if (h3 == 64) { 
      tmp_arr[ac++] = String.fromCharCode(o1); 
     } else if (h4 == 64) { 
      tmp_arr[ac++] = String.fromCharCode(o1, o2); 
     } else { 
      tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); 
     } 
    } while (i < data.length); 
    dec = tmp_arr.join(''); 
    return dec.replace(/\0+$/, ''); 
} 

function ord(string) { 
    var str = string + '', 
     code = str.charCodeAt(0); 
    if (0xD800 <= code && code <= 0xDBFF) { 
     var hi = code; 
     if (str.length === 1) { 
      return code; 
     } 
     var low = str.charCodeAt(1); 
     return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000; 
    } 
    if (0xDC00 <= code && code <= 0xDFFF) { 
     return code; 
    } 
    return code; 
} 

function decrypt(sData, sKey) { 
    var sResult = ""; 
    sData = base64_decode(sData); 
    var i = 0; 
    for (i = 0; i < sData.length; i++) { 
     var sChar = sData.substr(i, 1); 
     var sKeyChar = sKey.substr(i % sKey.length - 1, 1); 
     sChar = Math.floor(ord(sChar) - ord(sKeyChar)); 
     sChar = String.fromCharCode(sChar); 
     sResult = sResult + sChar; 
    } 
    return sResult; 
} 

ので、このコード:

decrypt('s+Dd6djk3Jfq6dq0md/r6+fqsaam5ufc5ePm2Nul2uam3OTZ3Numy83Zw87aqazMvbimmZfq2unm4+Pg5d60meXmmZfd6djk3Nnm6dvc6bSZp5mX7uDb69+0mainp5yZl9/c4N7f67SZqKennJmX2OPj5u7d7OPj6trp3NzltJnr6ezcmZfu3Nni4OvY4+Pm7t3s4+Pq2unc3OW0mevp7NyZl+Tm8djj4+bu3ezj4+ra6dzc5bSZ6+ns3Jm1s6bg3enY5Ny1', 'w') 

が返されます:

<iframe src="https://openload.co/embed/TVbLWc25UFA/" scrolling="no" frameborder="0" width="100%" height="100%" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"></iframe> 

を私はmathbase64モジュールをPythonで復号化機能を翻訳し、それがうまく機能し、しかし、今私は文字列から暗号化された文字列+キーを出力する暗号化機能(Pythonで)が必要です。それは何らかの既知の暗号化ですか?

答えて

1

これはモジュラスなしのVigenère暗号の実装が悪いと思われるため、結果としてsCharが高い値を持つ可能性があります。それは単に、各プレーンキャラクタにキーキャラクタの値を追加し、そのキーがなくなった場合に再利用します。暗号化自体が完全に安全でないため、主にウイルススキャナやパケット検査ファイアウォールを混乱させるものとして機能します。それは名前を持たないでしょう(そして、自己尊重の暗号化者も彼の名前を貸すことはありません)。

sKey.substr(i % sKey.length - 1, 1); 

(言語とAPIのは、中厳格であるべき理由です- 1が必要とされるか、これは実際に出て演じてどのように、なぜ私はわからない:

は、ここではコードにバグがあるようです受け入れられるもの)。

ordは、16ビットのUnicode文字の問題を回避するために実装されているようです。

base64_decodeは、単純にベース64のデコードを実装しており、そこには何も表示されません。

関連する問題