Гаммирование (Реализация на Java)

Java   8 Июнь 2012  Автор статьи:  

В данной статье мы рассмотрим шифрование на основе гамма последовательностей. Если при XOR кодировании мы получали последовательность байт из ключа, а затем его циклически повторяли, то тут мы будем генерировать последовательность байт на основе некоторого входного байта. В данной реализации каждый следующий член гаммы получается с помощью следующей формулы:T(n) = T(n-1)*A+C % m. Если вы хотите генерировать последовательность с помощью других значений m, A и С, то вы должны учитывать, что значения m и A должны быть взаимопростыми.

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
public class Gamma {
    private int A = 3, C = 2,m = 101;
    public byte[] encrypt(String text, int key)
    {
        int actualKey = key;
        byte[] arr = text.getBytes();
        byte[] result = new byte[arr.length];
        for(int i = 0; i< arr.length; i++)
        {
            result[i] = (byte) (arr[i] ^ actualKey);
            actualKey = (actualKey*A + C)%m;
        }
        return result;
    }
    public String decrypt(byte[] text, int key)
    {
        byte[] result  = new byte[text.length];
        int actualKey = key;
        for(int i = 0; i < text.length;i++)
        {
            result[i] = (byte) (text[i] ^ actualKey);
            actualKey = (actualKey*A + C)%m;
        }
        return new String(result);
    }
}

Научиться программировать

  • на Delphi

  • на Java

  • на C++