Шифрование данных
Шифрование — это основной способ защиты данных при их передаче и хранении, который позволяет предотвратить чтение или изменение информации третьими лицами.
«1С:Шина» позволяет вам шифровать и расшифровывать данные, используя симметричные и асимметричные алгоритмы шифрования.
«1С:Шина» не содержит собственные реализации алгоритмов шифрования, а использует криптографический фреймворк Java Cryptography Architecture (JCA). Вы также можете использовать модули криптографии сторонних производителей (Bouncy Castle, КриптоП ро), предварительно установив их на сервере.
Для шифрования или расшифровки данных в коде используйте один из следующих способов:
- Если вам требуется зашифровать или расшифровать небольшой объем данных, вызовите статический метод
Зашифровать
илиРасшифровать
типаШифрованиеДанных
. - Если вы работаете с большим объемом информации, вы можете шифровать/расшифровывать данные частями. Для этого создайте экземпляр типа
ШифрованиеДанных
и используйте методыДобавитьДанные
иПолучитьРезультат
.
Симметричное шифрование
Симметричное шифрование — это способ шифрования данных, при котором для шифрования и расшифровки применяется один и тот же ключ. Алгоритмы симметричного шифрования делятся на два типа:
- Блочные — шифруют данные блоками определенной длины (как правило, 64 или 128 бит). Если ис ходный текст или его последняя часть меньше размера блока, то его дополняют, чтобы привести к нужной длине. Примеры блочных шифров: AES, Blowfish, DES, Triple DES, RC2.
- Потоковые — шифруют каждый бит или байт исходного текста с использованием гаммирования (наложения последовательности, состоящей из случайных чисел, на открытый текст). Примеры потоковых шифров: RC4, SEAL, WAKE.
Перечисление АлгоритмСимметричногоШифрования
содержит основные алгоритмы шифрования, поддерживаемые в «1С:Шина». Вы также можете использовать и другие алгоритмы, которые поддерживаются вашим криптопровайдером. Для этого укажите название необходимого алгоритма в виде строки (например, "RC4"
).
Чтобы сгенерировать секретный ключ для шифрования данных, вызовите метод СоздатьСекретныйКлюч
типа ГенераторСекретногоКлюча
или ГенераторСекретногоКлючаНаОсновеПароля
.
Пример 1
Генерация секретного ключа
метод СгенерироватьКлюч()
// Генерация секретного ключа с использованием алгоритма AES-256.
знч ГенераторКлюча = новый ГенераторСекретногоКлюча(АлгоритмСимметричногоШифрования.Aes,
РазмерКлюча = 256)
знч СекретныйКлюч = ГенераторКлюча.СоздатьСекретныйКлюч()
;
Пример 2
Генерация секретного ключа на основе пароля
метод СгенерироватьКлюч()
// Генерация секретного ключа с использованием алгоритма AES-256 на основе пароля.
знч ГенераторКлюча = новый ГенераторСекретногоКлючаНаОсновеПароля(АлгоритмСимметричногоШифрования.Aes,
РазмерКлюча = 256)
знч СекретныйКлюч = ГенераторКлюча.СоздатьСекретныйКлюч("Password", Соль = Байты{7d60435f02e9e0ae})
;
Для работы симметричного шифра помимо ключа также необходимо указать трансформацию — набор преобразований, которые следует выполнить для получения результата. Трансформация указывается как строка вида "алгоритм/режим шифрования/дополнение"
или только "алгоритм"
, где:
- алгоритм — используемый алгоритм симметричного шифрования;
- режим шифрования — метод применения блочного шифра, позволяющий преобразовать блоки открытого текста в блоки зашифрованного текста. Основные режимы включают:
- None — указывает, что режим шифрования не используется;
- ECB (Electronic CodeBook) — режим электронной кодовой книги;
- CBC (Cipher Block Chaining) — режим сцепления блоков шифротекста;
- CFB (Cipher Feedback) — режим обратной связи по шифротексту;
- OFB (Output Feedback) — режим обратной связи вывода;
- CTR (Counter) — режим счетчика.
- дополнение (padding) — определяет, как необходимо дополнить исходное сообщение, чтобы его длина стала кратна размеру блока. Примеры: NoPadding, PKCS5Padding и т. д.
Основные трансформации, поддерживаемые «Шиной», представлены в перечислении ПреобразованиеСимметричногоШифрования
, но вы также можете использовать другие типы трансформаций, указав их в виде строки (например, "AES/CFB/NoPadding"
). В этом случае убедитесь, что данные трансформации поддерживаются выбранным вами криптопровайдером.
Примеры ниже показывают, как шифровать и расшифровывать данные, используя симметричный алгоритм шифрования AES. В качестве режима шифрования используется режим электронной кодовой книги (ECB), при котором каждый блок открытого текста шифруется независимо от остальных блоков с использованием одного и того же ключа шифрования.
Пример 3
Шифрование данных с помощью статического метода «Зашифровать» типа «ШифрованиеДанных»
метод ЗашифроватьДанные(ОткрытыйТекст: Байты, Ключ: СекретныйКлюч): Байты
// Шифрование открытого текста.
// Криптопровайдер будет выбран автоматически.
знч Шифротекст = ШифрованиеДанных.Зашифровать(ОткрытыйТекст, Ключ,
ПреобразованиеСимметричногоШифрования.AesEcb)
возврат Шифротекст
;
Пример 4
Шифрование данных с помощью метода «ПолучитьРезультат» типа «ШифрованиеДанных»
метод ЗашифроватьДанные(ОткрытыйТекст: Байты, Ключ: СекретныйКлюч): Байты
// Шифрование открытого текста.
// Криптопровайдер будет выбран автоматически.
знч Шифр = новый ШифрованиеДанных(ОперацияШифрования.Зашифровать, Ключ,
ПреобразованиеСимметричногоШифрования.AesEcb)
знч Шифротекст = Шифр.ПолучитьРезультат(ОткрытыйТекст)
возврат Шифротекст
;
Пример 5
Расшифровка данных с помощью статического метода «Расшифровать» типа «ШифрованиеДанных»
метод РасшифроватьДанные(Шифротекст: Байты, Ключ: СекретныйКлюч): Байты
// Расш ифровка зашифрованного текста.
// Криптопровайдер будет выбран автоматически.
знч ОткрытыйТекст = ШифрованиеДанных.Расшифровать(Шифротекст, Ключ,
ПреобразованиеСимметричногоШифрования.AesEcb)
возврат ОткрытыйТекст
;