Шифрование данных
Шифрование — это основной способ защиты данных при их передаче и хранении, который позволяет предотвратить чтение или изменение информации третьими лицами.
«1С:Исполнитель» позволяет вам шифровать и расшифровывать данные, используя симметричные и асимметричные алгоритмы шифрования.
«1С:Исполнитель» не содержит собственные реализации алгоритмов шифрования, а использует криптографический фреймворк Java Cryptography Architecture (JCA). Вы также можете использовать модули криптографии сторонних производителей (Bouncy Castle, КриптоПро), предварительно установив их на сервере.
Для шифрования или расшифровки данных в коде используйте один из следующих способов:
- Если вам требуется зашифровать или расшифровать небольшой объем данных, вызовите статический метод
Зашифровать
илиРасшифровать
типаШифрованиеДанных
. - Если вы работаете с большим объемом информации, вы можете шифровать/расшифровывать данные частями. Для этого создайте экземпляр типа
ШифрованиеДанных
и используйте методыДобавитьДанные
иПолучитьРезультат
.
Симметричное шифрование
Симметричное шифрование — это способ шифрования данных, при котором для шифрования и расшифровки применяется один и тот же ключ. Алгоритмы симметричного шифрования делятся на два типа:
- Блочные — шифруют данные блоками определенной длины (как правило, 64 или 128 бит). Если исходный текст или его последняя часть меньше размера блока, то его дополняют, чтобы привести к нужной длине. Примеры блочных шифров: AES, Blowfish, DES, Triple DES, RC2.
- Потоковые — шифруют каждый бит или байт исходного текста с использованием гаммирования (наложения последовательности, состоящей из случайных чисел, на открытый текст). Примеры потоковых шифров: RC4, SEAL, WAKE.
Перечисление АлгоритмСимметричногоШифрования
содержит основные алгоритмы шифрования, поддерживаемые в «1С:Исполнитель». Вы также можете использовать и другие алгоритмы, которые поддерживаются вашим криптопровайдером. Для этого укажите название необходимого алгоритма в виде строки (например, "RC4"
).
Чтобы сгенерировать секретный ключ для шифрования данных, вызовите метод СоздатьСекретныйКлюч
типа ГенераторСекретногоКлюча
или ГенераторСекретногоКлючаНаОсновеПароля
.
метод СгенерироватьКлюч()
// Генерация секретного ключа с использованием алгоритма AES-256.
знч ГенераторКлюча = новый ГенераторСекретногоКлюча(АлгоритмСимметричногоШифрования.Aes,
РазмерКлюча = 256)
знч СекретныйКлюч = Генерат орКлюча.СоздатьСекретныйКлюч()
;
метод СгенерироватьКлюч()
// Генерация секретного ключа с использованием алгоритма 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), при котором каждый блок открытого текста шифруется независимо от остальных блоков с использованием одного и того же ключа шифрования.
метод ЗашифроватьДанные(ОткрытыйТекст: Байты, Ключ: СекретныйКлюч): Байты
// Шифрование открытого текста.
// Криптопровайдер выбирается автоматически.
знч Шифротекст = ШифрованиеДанных.Зашифровать(ОткрытыйТекст, Ключ,
ПреобразованиеСимметричногоШифрования.AesEcb)
возврат Шифротекст
;
метод ЗашифроватьДанные(ОткрытыйТекст: Байты, Ключ: СекретныйКлюч): Байты
// Шифрование открытого текста.
// Криптопровайдер вы бирается автоматически.
знч Шифр = новый ШифрованиеДанных(ОперацияШифрования.Зашифровать, Ключ,
ПреобразованиеСимметричногоШифрования.AesEcb)
знч Шифротекст = Шифр.ПолучитьРезультат(ОткрытыйТекст)
возврат Шифротекст
;
метод РасшифроватьДанные(Шифротекст: Байты, Ключ: СекретныйКлюч): Байты
// Расшифровка зашифрованного текста.
// Криптопровайдер выбирается автоматически.
знч ОткрытыйТекст = ШифрованиеДанных.Рас шифровать(Шифротекст, Ключ,
ПреобразованиеСимметричногоШифрования.AesEcb)
возврат ОткрытыйТекст
;
метод РасшифроватьДанные(Шифротекст: Байты, Ключ: СекретныйКлюч): Байты
// Расшифровка зашифрованного текста.
// Криптопровайдер выбирается автоматически.
знч Шифр = новый ШифрованиеДанных(ОперацияШифрования.Расшифровать, Ключ,
ПреобразованиеСимметричногоШифрования.AesEcb)
знч ОткрытыйТекст = Шифр.ПолучитьРезультат(Шифротекст)
возврат ОткрытыйТекст
;
Асимметричное шифрование
Асимметричное шифрование — это способ шифрования данных, при котором используются два математически связанных ключа — открытый и закрытый. Открытый (публичный) ключ используется для шифрования сообщения, а закрытый (секретный) ключ — для его расшифровки. Данные ключи являются равнозначными, то есть, если открытый ключ используется для шифрования данных, расшифровать их можно только с помощью зак рытого ключа. И наоборот, если закрытый ключ используется для шифрования, выполнить расшифровку можно будет только с помощью открытого ключа.
«1С:Исполнитель» поддерживает наиболее распространенный алгоритм асимметричного шифрования — RSA, основывающийся на вычислительной сложности задачи факторизации больших полупростых чисел. Вы также можете использовать другие асимметричные алгоритмы, предназначенные для шифрования данных. Для этого вам необходимо установить сторонний криптопровайдер, содержащий реализацию данного алгоритма. Например, если вы хотите использовать алгоритм ElGamal, установите криптопровайдер Bouncy Castle.
Используйте метод СоздатьПаруКлючей
типа ГенераторПарыКлючей
, чтобы сгенерировать пару открытого и закрытого ключей асимметричного шифрования. Этот метод позволяет вам указать алгоритм шифрования и размер ключа. Вы также можете использоват ь упрощенный метод СоздатьПаруКлючейRsa
, чтобы создать пару ключей шифрования по алгоритму RSA.
метод СгенерироватьКлючи()
// Генерация ключей шифрования с использованием алгоритма RSA.
знч КлючиШифрования = новый ГенераторПарыКлючей(Алгоритм=АлгоритмАсимметричногоШифрования.Rsa,
РазмерКлюча = 1024).СоздатьПаруКлючей()
знч ОткрытыйКлюч = КлючиШифрования.ОткрытыйКлюч
знч ЗакрытыйКлюч = КлючиШифрования.ЗакрытыйКлюч
;
После того как ключи шифрования получены, вы можете приступить к шифрованию/расшифровке данных, как показано в примерах ниже.
метод ЗашифроватьДанные(ОткрытыйТекст: Байты, ОткрытыйКлюч: ОткрытыйКлюч): Байты
// Шифрование текста открытым ключом с использованием алгоритма RSA.
// Криптопровайдер выбирается автоматически.
возврат ШифрованиеДанных.Зашифровать(ОткрытыйТекст, ОткрытыйКлюч, "RSA")
;