2012-01-25 2 views
0

に私はこの上で、私の頭を壊している:は、c = C&(1 <<ビット)とint型のC = passkey.charAt(I%のpasskey.length()を組み合わせるチャレンジ

for(i=0; i<message.length(); i++) { 
     int c = passkey.charAt(i % passkey.length()); 
     int d = message.charAt(i); 

     c = c & (1 << bit); 

     result = result + (char)(c^d);  
    } 

私が知っていますLyJwNh9iPil3(メッセージ)は暗号化された(結果)に変換その私が把握することはできませんどのような、使用パスキーがどうあるべきかである現在、私がこだわっている:。。

L = 76 E = 69 その結果char = 69なので、Cは69 ^(1/76)= 1,05729でなければなりません...しかし、それはx番目のビットが噛まれた後で、パスワードの長さで除算された後です。

私はこれを解決することはできないだろうと考えています。それを確認できますか?メッセージ内の文字の数と結果は異なります。

+1

正しいコードを投稿した場合、 'c = c&(1 <<ビット)'は 'c'の1ビットを除くすべてのビットをクリアし、' passkey'に関する大部分の情報を削除します。例えば、 'passkey =" ABC "ならば、' passkey = "abc" 'と同じ結果が返されます。したがって、たいていの場合、あなたは 'passkey'の各文字(つまり、' bit 'のいずれか)から1ビットだけを再構築することができます。 – ruakh

+0

実際、私はさらに進んで、何かが欠けていない限り、間違いなく正しいコードを投稿していないと言います。 '' L 'は '0100 1100'で' E'は '0100 0101'なので、' c 'は '0000 1001'でなければなりません。' c = c&(1 <<ビット) '1にセットされたビットが1つしかないことを保証します。 – ruakh

+0

ところで、「c^d」は「d」の力に「c」を意味すると思っているようですね。そうではありません。 Javaや他のC言語では、「c^d」は「cとdのビット単位の排他的論理和」を意味します。 – ruakh

答えて

1

あなたがここに間違っている:

69^(1/76) = 1,05729.. 

^ビット単位のXOR、ない力があります。

+0

私はそれを学んだ、はい.. :) 私は間違ったトラックにここにいると思います。 :( –

関連する問題