powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / CryptoApi в PB и Oracle dbms_crypto
7 сообщений из 7, страница 1 из 1
CryptoApi в PB и Oracle dbms_crypto
    #38511183
cherry107
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеем скрипт на PL/SQL:

declare
passwordStr varchar2(8);
passwordKeyStr varchar2(16);
passwordRaw raw(128);
passwordKeyRaw raw(128);
TDES_ECB_NONE constant pls_integer := dbms_crypto.ENCRYPT_3DES_2KEY + dbms_crypto.CHAIN_ECB + dbms_crypto.PAD_NONE;
passwordHash raw(1024);
begin
passwordStr := 'ABCDEFJH';
passwordKeyStr := rpad(passwordStr, 16, chr(32));
passwordRaw := utl_raw.cast_to_raw(passwordStr);
passwordKeyRaw := utl_raw.cast_to_raw(passwordKeyStr);
passwordHash := dbms_crypto.encrypt(src => passwordRaw, typ => TDES_ECB_NONE, key => passwordKeyRaw);
dbms_output.put_line('> Password hash (encrypted DES3 hex value): ' || rawtohex(passwordHash));
end;


Как написать аналог на PowerBuilder 9.0, используя библиотеку CryptoApi, если:
- неизвестно какой провайдер используется Oracle
- непонятно какой алгоритм хэширования используется Oracle
- параметр PAD_NONE не описан в Wincrypt.h

Буду благодарен за любую информацию.
...
Рейтинг: 0 / 0
CryptoApi в PB и Oracle dbms_crypto
    #38511463
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherry107Имеем скрипт на PL/SQL:
...
Как написать аналог на PowerBuilder 9.0, используя библиотеку CryptoApi
Какова цель этого упражнения?


cherry107 - неизвестно какой провайдер используется Oracle
- непонятно какой алгоритм хэширования используется Oracle

cherry107 - параметр PAD_NONE не описан в Wincrypt.h
Код: plsql
1.
2.
3.
4.
5.
6.
    -- Block Cipher Algorithms
    ENCRYPT_3DES_2KEY  CONSTANT PLS_INTEGER            :=     2;  -- 0x0002
    -- Block Cipher Chaining Modifiers
    CHAIN_ECB          CONSTANT PLS_INTEGER            :=   768;  -- 0x0300
    -- Block Cipher Padding Modifiers
    PAD_NONE           CONSTANT PLS_INTEGER            :=  8192;  -- 0x2000




Например,так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
create or replace function EncryptPassword(passwordStr varchar2) return varchar2
is
BEGIN
passwordKeyStr varchar2(16);
passwordRaw raw(128);
passwordKeyRaw raw(128);
TDES_ECB_NONE constant pls_integer := dbms_crypto.ENCRYPT_3DES_2KEY + dbms_crypto.CHAIN_ECB + dbms_crypto.PAD_NONE;
passwordHash raw(1024);
begin
  passwordKeyStr := rpad(passwordStr, 16, chr(32));
  passwordRaw := utl_raw.cast_to_raw(passwordStr);
  passwordKeyRaw := utl_raw.cast_to_raw(passwordKeyStr);
  passwordHash := dbms_crypto.encrypt(src => passwordRaw, typ => TDES_ECB_NONE, key => passwordKeyRaw);
  --dbms_output.put_line('> Password hash (encrypted DES3 hex value): ' || rawtohex(passwordHash));
  return rawtohex(passwordHash);
end EncryptPassword;


Код: sql
1.
2.
//объявление в объекте транзакции
FUNCTION string EncryptPassword(string passwordStr ) RPCFUNC ALIAS FOR "EncryptPassword"


Код: sql
1.
2.
3.
//Вызов
string ls_Hash
ls_Hash = myTrans.EncryptPassword('ABCDEFJH')

Устроит?
...
Рейтинг: 0 / 0
CryptoApi в PB и Oracle dbms_crypto
    #38511496
cherry107
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за совет.
Нет не устроит.
Цель упражнения - обойтись вообще без Oracle.
Только PowerBuilder 9 и библиотеки Advapi32.dll
...
Рейтинг: 0 / 0
CryptoApi в PB и Oracle dbms_crypto
    #38512645
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рассмотрите этот пример и найдите ответ на свой вопрос.
...
Рейтинг: 0 / 0
CryptoApi в PB и Oracle dbms_crypto
    #38512788
cherry107
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый AIS, вопросы возникают именно при использовании тех функций, которые описаны в указанной Вами ссылке.
Конечно можно перебрать все провайдеры и алгоритмы хэширования, но что такое PAD_NONE похоже знает только Oracle.
...
Рейтинг: 0 / 0
CryptoApi в PB и Oracle dbms_crypto
    #38512864
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cherry107Конечно можно перебрать все провайдеры и алгоритмы хэширования, но что такое PAD_NONE похоже знает только Oracle.

Я точных ответов не знаю, но могу предположить:

1) В примере на PL/SQL хеширования нет, соответственно в CryptEncrypt нужно передать 0 в качестве хеша (хотя вся эта процедура в целом является реализаций некого хеша над паролем).
Там используется шифрование 3DES с двумя ключами (1-й и 3-й ключ из 3-х - совпадают). В качестве этих двух ключей выступает пароль дополненный пробелами до 16 байтов (по 8 байтов на ключ). При этом при импорте ключей через CryptImportKey() для использования в CryptoAPI вам надо их рассматривать как 3 ключа (см. выше).
2) PAD_NONE согласно доке оракла означает что данные для шифрования уже имеют длину кратную блоку шифрования (8 байтов в 3DES) и их не требуется дополнять перед шифрованием.
С другой стороны, судя по PL/SQL коду данные как раз не кратны 8 :)
Код: sql
1.
passwordRaw raw(128) -- это насколько я помню не гарантирует что тут будет всегда 128 байтов


Непонятно как оно должно работать.
Чтобы получить тот же эффект что и в оракле вам видимо при вызове функции CryptEncrypt нужно параметр Final передать FALSE, чтобы функция не пыталась дополнять шифруемый пароль до кратного 8.

См. тут пример http://www.gotdotnet.ru/forums/2/18751/90681/#post90681
Только заменить алг. с DES на 3DES (и не забыть ключ с 8 до 24 байтов расширить), режим с CBC на ECB. Вобщем доработать напильником :)
...
Рейтинг: 0 / 0
CryptoApi в PB и Oracle dbms_crypto
    #38512958
cherry107
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо Анатолий.
Ваш совет мне представляется очень ценным.
Буду экспериментировать.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / CryptoApi в PB и Oracle dbms_crypto
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]