2015-04-30 2 views
2

Я хотел бы зашифровать строку перед отправкой ее клиенту. Клиент предоставил мне открытый ключ RSA. Существует 512 байт модуля и 6 байт Pub. Exp. (все шестнадцатеричные).RSA Шифрование с использованием PL/SQL или Cobol

Обычно я запускаю Cobol для создания этого выходного файла. Но я не думаю, что у Cobol есть любой api/call для шифрования. Итак, я планировал вызвать процедуру/функцию Oracle для этого.

Вопрос: Как шифровать строку с использованием открытого ключа RSA в Oracle PL/SQL (или SQL)?

+2

Рассматривали ли вы использование хранимых процедур Java или C? – miraclefoxx

+0

Это может помочь, если вы перечислите платформу. Например, если вы находитесь на z, вы можете встраивать вызов в банку или использовать ICSF ... –

+0

, но Cobol на любой платформе будет поддерживать то, что вам нужно для шифрования: операции экспоненты и по модулю. –

ответ

3

RSA ключ, используемый в асимметричном шифровании. Oracle обеспечивает асимметричное шифрование в двух точках:

  • При передаче данных между клиентом и базой данных
  • Для аутентификации пользователя

И для этого требует Oracle Advanced Security Option. Это дополнение просто выполняется в двух случаях, описанных выше, и не предоставляет API.

Oracle предоставляет инструменты для симметричного шифрования - посмотрите в пакете DBMS_CRYPTO. Также вы можете использовать хранимые процедуры.

0

коммерческий пакет DidiSoft ORA_PGP предлагает подходящий метод, показанный ниже:

DECLARE 
    public_key_modulus CLOB := 'c24e5473164291964e247b179cf7590208bc96140ee6d900f531ce3d8d82b8a89a19e8c238222b8d10d943cdc6006adf094c84ca40a74d7e3abe91da690e72d399e79423826d95cd3a2f5b832e38b586078ddf5e6dea0ded39fd221d5772b7876295c1c36a79c253476e5344d7861e8e2bf1c71edc19ee57310a8e4d83350397'; 
    public_key_exponent CLOB := '10001'; 

    encrypted_data raw(32000); 
BEGIN 
    -- RSA Encrypt 
    encrypted_data := ORA_RSA.ENCRYPT_WITH_MODULUS(message => UTL_I18N.STRING_TO_RAW('Hello World', 'AL32UTF8'), 
         public_key_modulus => DBMS_LOB.substr(public_key_modulus), 
         public_key_exponent => DBMS_LOB.substr(public_key_exponent)); 
END; 

Отказ от ответственности: Я работаю на DidiSoft.