Реализация TEA Java - PullRequest
       4

Реализация TEA Java

0 голосов
/ 10 февраля 2019

Я реализую простой алгоритм TEA с примерами данных, поэтому я знаю, что мой выходной текст (0x53452e77 903386e3) неверен и должен быть 0x7556391b 2315d9f8.Какие-нибудь советы?

public class Driver {

    public static void main(String[] args) {
        int L = 0x12345678;
        int R = 0x9abcdef;
        int delta = 0x9e3779b9;
        int sum = 0x0;

        int[] key = {0xa56babcd,0xf000ffff,0xffffffff,0xabcdef01};


        //Encrypt
        for(int i = 0; i < 32; i++)
        {
            sum += delta;

            L += ((R << 4) + key[0]) ^ (R + sum) ^ ((R >>> 5) + key[1]);

            R += ((L << 4) + key[2]) ^ (L + sum) ^ ((L >>> 5) + key[3]);

        }

        System.out.println(String.format("0x%x", L) + " " + String.format("%x", R));        
    }

}

1 Ответ

0 голосов
/ 10 февраля 2019

Изменение заключается в добавлении & 0xfffffff0 и & 0x7ffffff к циклу for при вычислении L и R. Они известны как битовые маски - маскирование целого числа с помощью 0x7ffffff гарантирует, что 32-битное количество не может бытьзнаковый (самый значимый бит равен 0), в то время как маскирование с помощью 0xfffffff0 гарантирует, что младшие четыре бита равны нулю.

Другое незначительное изменение по сравнению с тем, что было сделано в OP, было использование >> вместо >>>, но это не влияет на результат.

public static void main(String[] args)
    {
        int L = 0x12345678;
        int R = 0x9abcdef;
        int delta = 0x9e3779b9;
        int sum = 0x0;

        int[] key = {0xa56babcd,0xf000ffff,0xffffffff,0xabcdef01};


        //Encrypt
        for(int i = 0; i < 32; i++)
        {
            sum += delta;

            L += (R << 4 & 0xfffffff0) + key[0] ^ R + sum ^ (R >> 5 & 0x7ffffff) + key[1];
            R += (L << 4 & 0xfffffff0) + key[2] ^ L + sum ^ (L >> 5 & 0x7ffffff) + key[3];

        }

        System.out.println(String.format("0x%x", L) + " " + String.format("%x", R));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...