2014-11-01 5 views
2

Мне нужно найти ключ для расшифровки того, что было зашифровано с помощью Xor. Я знаю, что ключ - это только один байт. Я надеялся, что сможет переборщить разумный ключ. Есть ли список возможных ключей, на которые меня могли бы направить. Кроме того, будет ключ в шестнадцатеричном или десятичном формате. БлагодаряВозможные байтовые ключи Xor

+2

Возможно, ваш вопрос относится к сайту обмена новостями для криптографии? –

+2

Если ключ является байтом, возможные клавиши - это возможные значения байта: 0, 1, 2, ..., 254, 255. В чем вопрос? – delnan

+0

Этот вопрос выглядит не по теме, поскольку речь идет о криптографии, не затрагивая самого программирования. –

ответ

1

Ну, если ключ находится только один байт, то просто попробуйте все числа от 0 (0000 0000) до 255 (1111 1111)

0

Я представил answer ранее для некоторой схемы 8-канальный исключающее шифрования производства результат из закодированного msg и без ключей. Функция, которая находит ключ вместе с установкой и поддержкой кодой выглядит следующим образом:

//setup a table of readable characters (characters we will expect to see in the decrypted result). 
var readableCharacters=Object.create(null); 
var alphanumerics=[[0x30,0x39],[0x41,0x5a],[0x61,0x7a]]; 
var alphabetical=[[0x41,0x5a],[0x61,0x7a]]; 
alphanumerics.forEach(function(range){ 
    var indexStart=range[0]; 
    var indexEnd=range[1]; 
    for (var i=indexStart; i<=indexEnd; i++){ 
    var ch=String.fromCharCode(i); 
    readableCharacters[ch]=1; 
    } 
}); 
//add some extra characters to the table (optional) 
(" ,.;:!\"'").split("").forEach(function(ch){readableCharacters[ch]=1;}); 

//xor decryption 
function dec(nkey,ncrypt){ 
    var ndec=nkey^ncrypt; 
    return ndec; 
} 

//find a key candidate by determining which keys correspond to the highest occurance of characters found in the readable character lookup table. 
function findKeyCandidate(byteArray){ 
    var keyResults=[]; 
    for (var key=0; key<256; key++){ 
    keyResults[key]=0; 
    byteArray.forEach(function(ncrypt){ 
     var ndec=dec(key,ncrypt); 
     var dchar=String.fromCharCode(ndec); 
     if(readableCharacters[dchar]){ 
     keyResults[key]++; 
     } 
    }); 
    } 
    keyResults=keyResults.map(function(count,index){ 
    return {key:index,count:count}; 
    }); 
    keyResults.sort(function(a,b){ 
    return a.count-b.count; 
    }); 
    return keyResults.pop().key; 
} 

Примечания: Для входа вам нужен массив фактических байт (т.е. массив чисел 0-255) не шестнадцатеричная строка (преобразование из hex в массив байтов и обратно присутствует в предыдущем решении, связанном выше). Вывод - это байтовый размер.

Все это предполагает, что вы получите сообщение, которое читается людьми, если вы ожидаете какую-либо другую структуру/состав сообщений, тогда вам нужно будет изменить код в соответствии с тем, что вы ожидаете найти.

Смежные вопросы