Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > StrToBin


Автор: Anakin 15.7.2011, 20:34
Добрый вечер.
Есть небольшая проблемка.
Имеетса сервер MSSQL
также есть таблица в которой должны хранитса пароли  в md5, ячейка куда пишетса пароль на базе типа Binary 
На форме у меня стоит Кнопка и TEdit
В TEdit я в писываю пароль шифрую его спомощью модуля md5 и необходимо его передать на базу.
Но тут возникает вопрос, в базе таблица имеет свойство binary а пароль у меня типа String как мне перевести String в Binary чтобы передать туда зашифрованый пароль.
Погуглил и нашол такой код:
Но Дельфи у меня ругаетса на один параметр TBit
Код

function BitToChar(Ch: Char; Bit: TBit): Char;
begin
  Result:= IntToStr((Byte(Ch) shr (Bit - 1)) and 1)[1];
end;

function StringToBin(const s: string): string;
var
  p, q: Integer;
begin
  for p:= 1 to Length(s) do
    for q:= High(TBit) downto Low(TBit) do
      Result:= Result + BitToChar(s[p], q)
end;

Подскажите как исправить положение или может есть какойто другой способ передать зашифрованый пароль md5 на Базу в таблицу с типом поля binary
Зарание Благодарен.

з.ы. Вот код с которым я работаю

Код

procedure TfReg.btn_regClick(Sender: TObject);
begin
  modul.Module.db_sql.Close;
  modul.Module.db_sql.SQL.Clear;
  modul.Module.db_sql.SQL.Add('INSERT INTO user_auth(account,password,quiz1,quiz2,answer1,answer2) VALUES (:Prm0,:Prm1, :Prm2, :Prm3, :Prm4, :Prm5);');
  modul.Module.db_sql.ParamByName('Prm0').AsString:=edt_login.Text;
  modul.Module.db_sql.ParamByName('Prm1').Value:=(Вот тут надо перевести в Binary(md5(edt_pwd.Text)));
  modul.Module.db_sql.ParamByName('Prm2').AsString:=edt_quiz1.Text;
  modul.Module.db_sql.ParamByName('Prm3').AsString:=edt_quiz2.Text;
  modul.Module.db_sql.ParamByName('Prm4').AsString:=edt_answer1.Text;
  modul.Module.db_sql.ParamByName('Prm5').AsString:=edt_answer2.Text;
  modul.Module.db_sql.Execute();
end;

Автор: Dik0n 15.7.2011, 22:06
Anakin, попробуй это, из DRKB взял

Код

function HexToBin(Hexadecimal: string): string;
const
  BCD: array [0..15] of string =
    ('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111',
    '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111');
var
  i: integer;
begin
  for i := Length(Hexadecimal) downto 1 do
    Result := BCD[StrToInt('$' + Hexadecimal[i])] + Result;
end;


Код

modul.Module.db_sql.ParamByName('Prm1').Value:= HexToBin(md5(edt_pwd.Text));

Автор: Anakin 15.7.2011, 23:34
Неа этот вареант тоже не помог.
Вот лог ошибки на попытку внести данные этого типа.

Implicit conversion from data type varchar to binary is not allowed

Шас я пробую сделать ещё одну процедуру, посмотрю может она поможет.
Но в любом случае есть у кого ещё идеи ?

Автор: Snowy 15.7.2011, 23:57
Бинарные данные нужно грузить из стрима.
Создай TMemoryStream. Засунь туда текст. Сделай ParamByName('Prm1').LoadFromStream

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)