Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции CryptoAPI (Base64), Шифрование-дешифрование строки 
V
    Опции темы
guest20060
Дата 1.11.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Привет. Необходимо создать функции для шифрования (и расшифрования) строки по алгоритму Base64. Только важно не реализовывать алгоритм, а взять готовый из CryptoAPI. Я не знаю ни названий функций, ни способов для их импортирования из библиотек (да и откуда?). Возможно ли создать нечто типа:

function EncodeStringToBase64(Str: String): String;
begin

end;

function EncodeBase64ToString(Str: String): String;
begin

end;

Надеюсь на вашу помощь...
PM MAIL   Вверх
Romikgy
Дата 1.11.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(guest20060 @  1.11.2006,  20:08 Найти цитируемый пост)
Надеюсь на вашу помощь... 

А поискать по форуму , напрячся?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
guest20060
Дата 1.11.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Будешь смеяться, но я не нашел здесь рабочего поиска. Не уверен, что найду решение проблемы применительно к моему случаю.
PM MAIL   Вверх
Snowy
Дата 1.11.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



А какая связь между CryptoAPI и Base64?
CryptoAPI - это шифрование.
Base64 - преобразование бинарных данных в текстовое представление.
PM MAIL   Вверх
guest20060
Дата 1.11.2006, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Согласен, я тоже связи не уловил... И все таки. Браузер отправляет мне сведения авторизации, зашифрованные Base64. Наверняка IE использует АПИшные функции. Уверен, что винда достаточно часто шифрует данные и необходимая функция все же есть.
PM MAIL   Вверх
Romikgy
Дата 1.11.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(guest20060 @  1.11.2006,  21:00 Найти цитируемый пост)
Будешь смеяться, но я не нашел здесь рабочего поиска. 

 smile 
http://forum.vingrad.ru/act-Search/f-85.html


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Snowy
Дата 1.11.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



угу. И в этом поиске нужно вбить "Base64".
Только искать не по этому разделу, а по Delphi/сети

Добавлено @ 23:00 
P.S. Кнопка поиска - вверху страницы - кнопка в виде лупы.
PM MAIL   Вверх
guest20060
Дата 1.11.2006, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Блин, ребята, хорош острить. Поставлен вопрос: как кодировать средствами WinAPI. Подключаемый модуль к программе только Windows и только Winsock. Я видел много кода с использованием компонентов, различных классов и др. подобного рода лабуды. Важно реализовать на API, но на худой конец подойдет и функция, не использующая другие модули и не сильно утяжеляющая размер исполнимого файла.

P. S. Пару лет назад получить корректный профессиональный ответ было гораздо проще чем сейчас. Но если нечего ответить, я прошу промолчать чтобы другие люди, действительно готовые помочь, видели, что тема до сих пор актуальна и не исчерпана. Надеюсь на ваше понимание...
PM MAIL   Вверх
Snowy
Дата 1.11.2006, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(guest20060 @  2.11.2006,  00:10 Найти цитируемый пост)
Блин, ребята, хорош острить
Даже и не пытались.
Просто указывали тебе на некорректность вопроса и место, где искать.

Цитата(guest20060 @  2.11.2006,  00:10 Найти цитируемый пост)
как кодировать средствами WinAPI
Встроенных средств нет.

Цитата(guest20060 @  2.11.2006,  00:10 Найти цитируемый пост)
 подойдет и функция, не использующая другие модули и не сильно утяжеляющая размер исполнимого файла.
 http://forum.vingrad.ru/index.php?showtopi...st&p=200924
http://forum.vingrad.ru/index.php?showtopi...st&p=610684

PM MAIL   Вверх
dumb
Дата 1.11.2006, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(guest20060 @  1.11.2006,  23:10 Найти цитируемый пост)
Подключаемый модуль к программе только Windows и только Winsock

cryptoapi к этим двум не относится ни разу.

CryptStringToBinary
CryptBinaryToString

Цитата(guest20060 @  1.11.2006,  23:10 Найти цитируемый пост)
подойдет и функция, не использующая другие модули и не сильно утяжеляющая размер исполнимого файла

http://www.google.ru/search?q=base64+asm

Добавлено @ 23:45 
хотя windows - это ж солянка... там может и есть cryptoapi... user posted image
PM MAIL   Вверх
Snowy
Дата 2.11.2006, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(dumb @  2.11.2006,  00:43 Найти цитируемый пост)
CryptStringToBinary
CryptBinaryToString
Хм. Всё таки додумались встроить это в систему.
В принципе можно и хедеры для них написать.
Правда юзать их ещё рано - есть только в XP и 2003. Можно юзать только в корпоративах. Ибо далеко не универсал.

Цитата(dumb @  2.11.2006,  00:43 Найти цитируемый пост)
хотя windows - это ж солянка... там может и есть cryptoapi...
CryptoAPI естественно есть. advapi32.dll.
Но мне совершенно непонятно, как можно Base64 называть Crypt.
Кокой это нафиг крипт, когда банальный конверт.
PM MAIL   Вверх
dumb
Дата 2.11.2006, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



Цитата(Snowy @  2.11.2006,  00:08 Найти цитируемый пост)
Правда юзать их ещё рано - есть только в XP и 2003

моя бы свою написало: делов-то - на пол-кило...

Цитата(Snowy @  2.11.2006,  00:08 Найти цитируемый пост)
CryptoAPI естественно есть. advapi32.dll

эм. я имел ввиду юнит дельфевый... smile (btw: таки Crypt32.dll)

Цитата(Snowy @  2.11.2006,  00:08 Найти цитируемый пост)
Но мне совершенно непонятно, как можно Base64 называть Crypt.
Кокой это нафиг крипт, когда банальный конверт.

думаю, что в данном случае приставка означает принадлежность к библиотеке.
а в составе криптографических функций imho она действительно необходима(как утилитарная), ибо достаточно часто используется передача именно кодированных base64 данных.

PM MAIL   Вверх
Snowy
Дата 2.11.2006, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(dumb @  2.11.2006,  02:35 Найти цитируемый пост)
эм. я имел ввиду юнит дельфевый...  (btw: таки Crypt32.dll)
В штатных хедерах CryptoAPI вообще не значится.

Цитата(dumb @  2.11.2006,  02:35 Найти цитируемый пост)
в составе криптографических функций imho она действительно необходима(как утилитарная), ибо достаточно часто используется передача именно кодированных base64 данных.
Это да.
Я имею ввиду отношение к Crypto. Base64 - это не криптование, а всего лишь преобразование из одного формата в другой.
Это не болшее криптование, чем IntToHex.
Именно этим вызвано моё недоумение.
Криптографией тут и не пахнет.

По данным функциям сделал хедеры и пример.
Хедеры:
Код

unit XPBase64;

interface

uses Windows;

const
  crypt32 = 'crypt32.dll';

  // Flags:
  CRYPT_STRING_BASE64HEADER = 0;
  // Base64, with certificate beginning and ending headers
  CRYPT_STRING_BASE64 = 1;
  // Base64, without headers
  CRYPT_STRING_BINARY = 2;
  // Pure binary copy
  CRYPT_STRING_BASE64REQUESTHEADER = 3;
  // Base64, with request beginning and ending headers
  CRYPT_STRING_HEX = 4;
  // Hexadecimal only
  CRYPT_STRING_HEXASCII= 5;
  // Hexadecimal, with ASCII character display
  CRYPT_STRING_BASE64X509CRLHEADER = 9;
  // Base64, with X.509 CRL beginning and ending headers
  CRYPT_STRING_HEXADDR = 10;
  // Hexadecimal, with address display
  CRYPT_STRING_HEXASCIIADDR = 11;
  // Hexadecimal, with ASCII character and address display
  CRYPT_STRING_HEXRAW = 12;
  // A raw hex string.

function ToBase64(s: string; Flags: dword = CRYPT_STRING_BASE64REQUESTHEADER): string;
function FromBase64(s: string; Flags: dword = CRYPT_STRING_BASE64REQUESTHEADER): string;

function CryptStringToBinary(pszString: PChar; cchString: dword; dwFlags: dword;
         pbBinary: pointer; var pcbBinary: dword; var pdwSkip: dword;
         var pdwFlags: dword): boolean; stdcall;

function CryptBinaryToString(pbBinary: pointer; cbBinary: dword; dwFlags: dword;
         pszString: PChar; var pcchString: dword): boolean; stdcall;

function CryptStringToBinaryA(pszString: PChar; cchString: dword; dwFlags: dword;
         pbBinary: pointer; var pcbBinary: dword; var pdwSkip: dword;
         var pdwFlags: dword): boolean; stdcall;

function CryptBinaryToStringA(pbBinary: pointer; cbBinary: dword; dwFlags: dword;
         pszString: PChar; var pcchString: dword): boolean; stdcall;

function CryptStringToBinaryW(pszString: PWideChar; cchString: dword; dwFlags: dword;
         pbBinary: pointer; var pcbBinary: dword; var pdwSkip: dword;
         var pdwFlags: dword): boolean; stdcall;

function CryptBinaryToStringW(pbBinary: pointer; cbBinary: dword; dwFlags: dword;
         pszString: PWideChar; var pcchString: dword): boolean; stdcall;

implementation

function CryptStringToBinary; external crypt32 name 'CryptStringToBinaryA';
function CryptBinaryToString; external crypt32 name 'CryptBinaryToStringA';
function CryptStringToBinaryA; external crypt32 name 'CryptStringToBinaryA';
function CryptBinaryToStringA; external crypt32 name 'CryptBinaryToStringA';
function CryptStringToBinaryW; external crypt32 name 'CryptStringToBinaryW';
function CryptBinaryToStringW; external crypt32 name 'CryptBinaryToStringW';

function ToBase64(s: string; Flags: dword = CRYPT_STRING_BASE64REQUESTHEADER): string;
var sz: dword;
begin
  CryptBinaryToString(pointer(s), Length(s), Flags, nil, sz);
  SetLength(result, sz);
  CryptBinaryToString(pointer(s), Length(s), Flags, pointer(result), sz);
end;

function FromBase64(s: string; Flags: dword = CRYPT_STRING_BASE64REQUESTHEADER): string;
var sz, skip: dword;
begin
  CryptStringToBinary(pointer(s), Length(s), Flags, nil, sz, skip, Flags);
  SetLength(result, sz);
  CryptStringToBinary(pointer(s), Length(s), Flags, pointer(result), sz, skip, Flags);
end;

end.

Пример:
Код

uses XPBase64;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo2.Text := ToBase64(Memo1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo3.Text := FromBase64(Memo2.Text);
end;

PM MAIL   Вверх
guest20060
Дата 2.11.2006, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 18.10.2006

Репутация: нет
Всего: нет



Спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1277 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.