Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Java SE Организация взаимодествия потоков join() (Не могу разобрать код) (50 строк) public class DeadLockExample { Integer chairs = 12; Integer money = 500; void createDeadLock() throws InterruptedException { Thread benderThread = new Thread("Bender's Thread") { public void run() { synchronized (money) { System.out.println("Get " + getChairs() + " chairs."); } https://www.cyberforum.ru/ java-j2se/ thread930006.html Программа умножения Java SE
Занимаюсь самообучением. Вот придумала себе задачку с использованием методов и пытаюсь ее решить: пользователь вводит самостоятельно 3 числа, программа их считывает и выводит на экран результат умножения чисел. Пытаюсь считывание реализовать с помощью сканнера, ввожу такой код: package umnogenie; import java.util.Scanner; public class testq { private static Scanner s1; private...
Java SE java исключения Помогите разобраться с исключениями в java. Перечитал кучу книг и статей, нихрена не пойму. Объясните на пальцах, если это возможно и с примерчиком бы. Заранее спасибо... https://www.cyberforum.ru/ java-j2se/ thread929708.html Java SE сборщик мусора Доброго времени суток. Подскажите пожалуйста каким образом сборщик мусора выбирает какие созданные объекты удалять, а какие не удалять, по какому алгоритму? и что нужно сделать, чтобы сборщик мусора не удал объект, который мне нужен? или скиньте литературу! https://www.cyberforum.ru/ java-j2se/ thread929566.html
Написать клас FootballFactory Java SE
Незнаю как делать: Написать класс FootballFactory, у которого есть метод FootballCreate(int id ) , id - тип футболиста(воротар, форвард) Помогите решить: верный путь решения показать.
Java SE Метод getDescription() Помогите решить задачку : В интерфейс Family добавить метод getDescription(), который возвращает строку (string) в которой идет "название класса" название класса - или ребенок, или мама, папа Подскажите книги где подробно об этом пишется, или приведите пример как это делается Спасибо Добавлено через 50 минут я сдела так: public interface Family { https://www.cyberforum.ru/ java-j2se/ thread929436.html
Java SE Как заведено маршализировать объекты в XML? https://www.cyberforum.ru/ java-j2se/ thread929389.html
Я до этого обходил XML стороной, но теперь хочу разобраться как же оно заведено маршализировать (кстати маршализировать VS сериализировать, в чём фактическая разница? Почитал вики и так и не пришёл к конкретным выводам :)) объекты в XML. Вот например мне подсказали что популярно делать так чтобы сервлет проверял клиента и если это браузер то отдавал html, а если это какой-то другой клиент - xml,...
Java SE Импорт пакетов
Люди, сильно не пинайте, я пытаюсь только разобраться. У меня есть проект rnd и проект rnddemo. Оба лежат в одной папке Projects. Структура папок rnd: rnd \build\classes\rnd\Rnd.class \src\rnd\Rnd.java package rnd; public class Rnd { // ... }
Java SE Сумма цифр числа в цикле https://www.cyberforum.ru/ java-j2se/ thread929287.html
public class prog1 { public static void main(String args) { int n = 423,s = 0; for(int i = 1,m = n;(m % (10 * i)) >= 1;s += (m % (10 * i)),i++ ,m -= (m % (10 * i))){ System.out.println(m); } } } } Помогите пожалуйста.
Java SE Одна лишняя итерация в цикле for Здравствуйте , вот уже второй раз , получаю выход за пределы массива . Первый раз разделил на два метода . А вот сейчас опять получил , хочу разобраться почему так . подскажите пожалуйста public boolean checkEmptyCells() { for(int i=MIN_VALUE;i<fieldSize;i++) { for (int j=MIN_VALUE;i<fieldSize;j++) { if (this.isEmpty(i,j)) { ... https://www.cyberforum.ru/ java-j2se/ thread929236.html
JDBC: закрытие ресурсов Java SE
Что я хочу сделать: void closeAllResources(ResultSet rs){ try{ rs.close(); rs.getStatement().close(); rs.getStatement().getConnection().close(); }catch (Exception e){ e.printStackTrace(); }
Java SE Проблемы c ArrayList https://www.cyberforum.ru/ java-j2se/ thread929019.html
Я новачок в програмирование, только учусь. Мне нужно реализувать метод додавания например собак в клас farm , у меня есть клас dog, мне нужно сначала додать собаку потом удалить собаку под ее индексом. Я делаю так но это я понимаю что не верно. Подскажите что я именно не верно сделала, или хорошую нигу где на примерах это все разказывается. public class Farm { ArrayList Farm = new...
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 4
0

Шифрование Rabbit - Java SE - Ответ 4892095

28.07.2013, 23:06. Показов 1588. Ответов 0
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, появилась нужда сделать шифрование данных между клиентом и сервером, выбор пал на алгоритм Rabbit Cipher. Проблема в том что при инициализации ключа на Java и C++ коде разные числа, помогите сделать так что бы данные на С++ можно было расшифровать на Java.

Код на С++:

Crypt.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef CRYPT_H
#define CRYPT_H
 
#define rotl(a,b) ((a<<b) | (a>>(32-b)))
#define len(arr, value) (sizeof(arr) / sizeof(value))
 
typedef unsigned char byte;
 
class Crypt
{
private:
 
    int X[8], C[8], b;
 
    int _gFunction(int val);
    void _nextState();
    void _keyStream(byte*);
    void _setupKey(const byte*);
 
public:
    GameCrypt(const byte*);
    void cypher(byte*, size_t);
};
 
#endif /* CRYPT_H */
Crypt.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "stdafx.h"
#include "Crypt.h"
 
 
#include <memory.h>
 
int Crypt::_gFunction(int val)
{
    /* Temporary variables */
    int a, b, h, l;
 
    /* Construct high and low argument for squaring */
    a = val & 0xFFFF;
    b = val >> 16;
 
    /* Calculate high and low result of squaring */
    h = ((((a*a) >> 17) + (a*b)) >> 15) + b*b;
    l = val*val;
 
    /* Return high XOR low */
    return h^l;
}
 
void Crypt::_nextState()
{
    /* Temporary variables */
    int g[8], c_old[8], i;
 
    /* Save old counter values */
    for (i = 0; i < 8; i++)
        c_old[i] = C[i];
 
    /* Calculate new counter values */
    C[0] += 0x4D34D34D + b;
    C[1] += 0xD34D34D3 + (C[0] < c_old[0]);
    C[2] += 0x34D34D34 + (C[1] < c_old[1]);
    C[3] += 0x4D34D34D + (C[2] < c_old[2]);
    C[4] += 0xD34D34D3 + (C[3] < c_old[3]);
    C[5] += 0x34D34D34 + (C[4] < c_old[4]);
    C[6] += 0x4D34D34D + (C[5] < c_old[5]);
    C[7] += 0xD34D34D3 + (C[6] < c_old[6]);
    b = (C[7] < c_old[7]);
 
    /* Calculate the g-functions */
    for (i = 0; i < 8; i++)
        g[i] = this->_gFunction(X[i] + C[i]);
 
    /* Calculate new state values */
    X[0] = g[0] + rotl(g[7], 16) + rotl(g[6], 16);
    X[1] = g[1] + rotl(g[0], 8) + g[7];
    X[2] = g[2] + rotl(g[1], 16) + rotl(g[0], 16);
    X[3] = g[3] + rotl(g[2], 8) + g[1];
    X[4] = g[4] + rotl(g[3], 16) + rotl(g[2], 16);
    X[5] = g[5] + rotl(g[4], 8) + g[3];
    X[6] = g[6] + rotl(g[5], 16) + rotl(g[4], 16);
    X[7] = g[7] + rotl(g[6], 8) + g[5];
}
 
void Crypt::_keyStream(byte *stream)
{
    _nextState();
 
    *(int*) (stream + 0) = X[0] ^ (X[5] >> 16) ^ (X[3] << 16);
    *(int*) (stream + 4) = X[2] ^ (X[7] >> 16) ^ (X[5] << 16);
    *(int*) (stream + 8) = X[4] ^ (X[1] >> 16) ^ (X[7] << 16);
    *(int*) (stream + 12) = X[6] ^ (X[3] >> 16) ^ (X[1] << 16);
}
 
void Crypt::_setupKey(const byte *K)
{
    memset(X, 0, sizeof(X));
    memset(C, 0, sizeof(C));
    b = 0;
 
    X[0] = (K[1] << 16) | (K[0] & 0xFFFF);
    X[1] = (K[6] << 16) | (K[5] & 0xFFFF);
    X[2] = (K[3] << 16) | (K[2] & 0xFFFF);
    X[3] = (K[0] << 16) | (K[7] & 0xFFFF);
    X[4] = (K[5] << 16) | (K[4] & 0xFFFF);
    X[5] = (K[2] << 16) | (K[1] & 0xFFFF);
    X[6] = (K[7] << 16) | (K[6] & 0xFFFF);
    X[7] = (K[4] << 16) | (K[3] & 0xFFFF);
 
    C[0] = (K[4] << 16) | (K[5] & 0xFFFF);
    C[1] = (K[1] << 16) | (K[2] & 0xFFFF);
    C[2] = (K[6] << 16) | (K[7] & 0xFFFF);
    C[3] = (K[3] << 16) | (K[4] & 0xFFFF);
    C[4] = (K[0] << 16) | (K[1] & 0xFFFF);
    C[5] = (K[5] << 16) | (K[6] & 0xFFFF);
    C[6] = (K[2] << 16) | (K[3] & 0xFFFF);
    C[7] = (K[7] << 16) | (K[0] & 0xFFFF);
 
    for (int i = 0; i < 4; ++i)
        _nextState();
 
    C[0] ^= X[4];
    C[1] ^= X[5];
    C[2] ^= X[6];
    C[3] ^= X[7];
    C[4] ^= X[0];
    C[5] ^= X[1];
    C[6] ^= X[2];
    C[7] ^= X[3];
}
 
void Crypt::cypher(byte *data, size_t length)
{
    byte *stream = new byte[16];
    for (int i = 0; i < length; i++)
    {
        if (i % 16 == 0)
            this->_keyStream(stream);
 
        data[i] = data[i] ^ stream[i % 16];
    }
}
 
Crypt::Crypt(const byte* key)
{
    this->_setupKey(key);
}
Код на Java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package net.crypt;
 
public class RabbitCrypt
{
    private int X[] = new int[8], C[] = new int[8], b;
 
    public void setKey(byte key[], byte[] iv)
    {
        b = 0;
 
        X[0] = (key[1] << 16) | (key[0] & 0xFFFF);
        X[1] = (key[6] << 16) | (key[5] & 0xFFFF);
        X[2] = (key[3] << 16) | (key[2] & 0xFFFF);
        X[3] = (key[0] << 16) | (key[7] & 0xFFFF);
        X[4] = (key[5] << 16) | (key[4] & 0xFFFF);
        X[5] = (key[2] << 16) | (key[1] & 0xFFFF);
        X[6] = (key[7] << 16) | (key[6] & 0xFFFF);
        X[7] = (key[4] << 16) | (key[3] & 0xFFFF);
 
        C[0] = (key[4] << 16) | (key[5] & 0xFFFF);
        C[1] = (key[1] << 16) | (key[2] & 0xFFFF);
        C[2] = (key[6] << 16) | (key[7] & 0xFFFF);
        C[3] = (key[3] << 16) | (key[4] & 0xFFFF);
        C[4] = (key[0] << 16) | (key[1] & 0xFFFF);
        C[5] = (key[5] << 16) | (key[6] & 0xFFFF);
        C[6] = (key[2] << 16) | (key[3] & 0xFFFF);
        C[7] = (key[7] << 16) | (key[0] & 0xFFFF);
 
        for(int i=0; i < 4; i++)
            nextState();
 
        C[0] ^= X[4];
        C[1] ^= X[5];
        C[2] ^= X[6];
        C[3] ^= X[7];
        C[4] ^= X[0];
        C[5] ^= X[1];
        C[6] ^= X[2];
        C[7] ^= X[3];
    }
 
    public void crypt(byte data[], int offset, int size)
    {
        byte stream[] = new byte[16];
        for(int i = 0; i < size; i++)
        {
            if(i % 16 == 0)
                stream = keyStream();
 
            data[i + offset] ^= stream[i % 16];
        }
    }
 
    private void nextState()
    {
        /* Temporary variables */
        int G[] = new int[8], i;
 
       /* Calculate new counter values */
        for(int j = 0; j < 8; ++j)
        {
            final long t = (C[j] & 0xFFFFFFFFL) + (A[j] & 0xFFFFFFFFL) + b;
            b = (byte) (t >>> 32);
            C[j] = (int) (t & 0xFFFFFFFF);
        }
 
       /* Calculate the g-functions */
        for (i = 0;i < 8; i++)
            G[i] = func(X[i] + C[i] & 0xFFFFFFFFL);
 
        /* unroll */
        X[0] = G[0] + rotl(G[7], 16) + rotl(G[6], 16);
        X[1] = G[1] + rotl(G[0], 8) + G[7];
        X[2] = G[2] + rotl(G[1], 16) + rotl(G[0], 16);
        X[3] = G[3] + rotl(G[2], 8) + G[1];
        X[4] = G[4] + rotl(G[3], 16) + rotl(G[2], 16);
        X[5] = G[5] + rotl(G[4], 8) + G[3];
        X[6] = G[6] + rotl(G[5], 16) + rotl(G[4], 16);
        X[7] = G[7] + rotl(G[6], 8) + G[5];
    }
 
    private byte[] keyStream()
    {
        nextState();
 
        int x;
        byte[] ks = new byte[16];
 
        /* unroll */
        x = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);
        ks[0] = (byte) x;
        ks[1] = (byte) (x >> 8);
        ks[2] = (byte) (x >> 16);
        ks[3] = (byte) (x >> 24);
 
        x = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);
        ks[4] = (byte) x;
        ks[5] = (byte) (x >> 8);
        ks[6] = (byte) (x >> 16);
        ks[7] = (byte) (x >> 24);
 
        x = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);
        ks[8] = (byte) x;
        ks[9] = (byte) (x >> 8);
        ks[10] = (byte) (x >> 16);
        ks[11] = (byte) (x >> 24);
 
        x = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);
        ks[12] = (byte) x;
        ks[13] = (byte) (x >> 8);
        ks[14] = (byte) (x >> 16);
        ks[15] = (byte) (x >> 24);
 
        return ks;
    }
 
    private int rotl(int value, int shift)
    {
        return value << shift | value >>> 32 - shift;
    }
 
    private int func(long value)
    {
        /* Return high XOR low */
        return (int) ((value *= value) ^ value >>> 32);
    }
 
    private final int[] A = new int[]
            {
                    0x4D34D34D, 0xD34D34D3, 0x34D34D34, 0x4D34D34D,
                    0xD34D34D3, 0x34D34D34, 0x4D34D34D, 0xD34D34D3
            };
}
Различия уже идут в _setKey(...) в элементе X[0].

Тестовый ключ: 64, -107, 82, -20, -66, -7, 84, -23, 15, 105, -11, 122, -120, -113, -37, 119

Вернуться к обсуждению:
Шифрование Rabbit Java SE
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2013, 23:06
Готовые ответы и решения:

Шифрование с помощью матрицы и вектора (шифрование методом аналитических преобразований)
Программисты Здравствуйте! Не могу сделать этот метод,не понимаю и все тут), хорошо бы если...

Как поменять результат шифрование \ Метод шифрование RSA
Здравствуйте! Прошу помощи! В просторах интернета нашла одну статью в которой реализован метод...

шифрование)
Программа должна реализовывать шифрования и расшифровки текстовых фалов. Имя файла содержимое...

Шифрование
Может кто помочь с этими Тремя заданиями? Буду очень благодарен ))...

0
28.07.2013, 23:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2013, 23:06
Помогаю со студенческими работами здесь

Шифрование
Хочу сделать пароль в INI файле для последующего подключения в делфи. Как его зашифровать?

Шифрование
Здравствуйте!!! Я написал программу шифрования файлов по некоей статье из Интернета. Все хорошо, но...

Шифрование
Всем привет! В общем дело такое, забыл чем шифровал файл. Помню только что это вроде была...

Шифрование БД
Доброго времени суток! Подскажите как зашифровать БД? Нашел на сайте MS документацию, но там все...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru