https://github.com/efler/cryptography-des-deal
DES/DEAL symmetric-key algorithm for the encryption
https://github.com/efler/cryptography-des-deal
algorithms cipher cipher-algorithms cryptography deal des encoder-decoder security
Last synced: 2 months ago
JSON representation
DES/DEAL symmetric-key algorithm for the encryption
- Host: GitHub
- URL: https://github.com/efler/cryptography-des-deal
- Owner: Efler
- Created: 2024-04-06T09:41:26.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-21T00:01:59.000Z (about 1 year ago)
- Last Synced: 2025-02-01T09:21:53.738Z (4 months ago)
- Topics: algorithms, cipher, cipher-algorithms, cryptography, deal, des, encoder-decoder, security
- Language: Java
- Homepage:
- Size: 968 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# DES/DEAL Encryptor
Шифрование данных с помощью алгоритмов DES и DEAL
---
## Algorithms
Данная библиотека позволяет производить шифрование/дешифрование данных и файлов с помощью алгоритмов шифрования `Data Encryption Standard (DES)` и его усовершенствованной версией `Data Encryption Algorithm with Larger blocks (DEAL)`
**Параметры DES:**
* Размер блока: `64 бит`
* Размер ключа: `56 бит`
* Колличество раундов: `16`**Параметры DEAL:**
* Размер блока: `128 бит`
* Размер ключа: `128`, `192` или `256 бит` _(в зависимости от конфигурации)_
* Количество раундов: `6` или `8` _(в зависимости от конфигурации)_---
## Configuration
Оба алгоритма поддерживают различные режимы шифрования блоков и различные типы набивки блока
**Режимы шифрования блоков:**
* `ECB` - Electronic Codebook
* `CBC` - Cipher Block Chaining
* `PCBC` - Propagating Cipher Block Chaining
* `CFB` - Cipher Feedback
* `OFB` - Output Feedback
* `CTR` - Counter mode
* `RD` - Random Delta**Типы набивки блока:**
* `Zeroz`
* `ANSI`
* `X.923`
* `PKCS7`
* `ISO10126`Шифрование можно производить как синхронно, так и асинхронно _(количество потоков конфигурируется)_
---
## Usage
Шифрование/дешифрование и конфигурация производится через класс `EncryptorManager`
Конструктор класса принимает следующие параметры:
* Ключ шифрования _(64 или 128 бит в зависимости от алгоритма шифрования)_
* Алгоритм шифрования
- `DES`
- `DEAL_128`
- `DEAL_192`
- `DEAL_256`
* Режим шифрования блоков
- `ECB`
- `CBC`
- `PCBC`
- `CFB`
- `OFB`
- `CTR`
- RandomDelta
* Тип набивки блока
- `Zeroz`
- `ANSI`
- `X.923`
- `PKCS7`
- `ISO10126`
* Вектор инициализации**Пример создания `EncryptorManager`**
```
// key = 0x133457788BBCDFF1
byte[] key = new byte[] {
(byte) 0x13, (byte) 0x34, (byte) 0x57, (byte) 0x79,
(byte) 0x9B, (byte) 0xBC, (byte) 0xDF, (byte) 0xF1
};// initialization vector = 0x1F3400789AB5DEF7
byte[] IV = new byte[]{
(byte) 0x1F, (byte) 0x34, (byte) 0x00, (byte) 0x78,
(byte) 0x9A, (byte) 0xB5, (byte) 0xDE, (byte) 0xF7
};EncryptorManager manager = new EncryptorManager(
key,
EncryptorManager.EncryptionAlgorithm.DES,
EncryptModes.Mode.CTR,
Paddings.PaddingType.ISO10126,
IV
);
```**Шифрование/дешифрование байтов**
_синхронно_
```
byte[] plainText = new byte[] {
(byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04,
(byte) 0x05, (byte) 0x06, (byte) 0x07, (byte) 0x08, (byte) 0x09
};byte[] encryptedText = manager.encryptSync(plainText); // шифрование
byte[] decryptedText = manager.decryptSync(encryptedText); // дешифрование// Arrays.equals(plainText, decryptedText) --> true
```_aсинхронно_
```
byte[] plainText = new byte[] {
(byte) 0x00, (byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04,
(byte) 0x05, (byte) 0x06, (byte) 0x07, (byte) 0x08, (byte) 0x09
};byte[] encryptedText = manager.encryptAsync(plainText, 5); // шифрование (5 - количество задействованных потоков)
byte[] decryptedText = manager.decryptAsync(encryptedText, 5); // дешифрование (5 - количество задействованных потоков)// Arrays.equals(plainText, decryptedText) --> true
```**Шифрование/дешифрование файлов**
_синхронно_
```
manager.encryptFileSync("[input_file_path]", "[output_file_path]"); // шифрование
manager.decryptFileSync("[input_file_path]", "[output_file_path]"); // дешифрование
```_aсинхронно_
```
manager.encryptFileAsync("[input_file_path]", "[output_file_path]", 5); // шифрование (5 - количество задействованных потоков)
manager.decryptFileAsync("[input_file_path]", "[output_file_path]", 5); // дешифрование (5 - количество задействованных потоков)
```