Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 О Шифровании паролей  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
У меня такая проблема есть табличка с 5000 тысячами 8-ми значными паролями их нужно зашифровать. Я решил использовать не документ. ф-ии
pwdencrypt и pwdcompare

написал такую процедуру:


автор
сreate procedure Crypto_hesh as
declare @i decimal
declare @password nvarchar(8)

set @i=1
while(@i<=5000)
begin
select @password=parol
from test1
where [id]=@i

update [test1]
set pwd=pwdencrypt(@password)
where [id]=@i


set @i=@i+1
end


По сути в столбце parol хранится пароль и я его шифрую и записываю в pwd

Вот структура самой таблицы:
автор
CREATE TABLE [dbo].[test1] (
[id] [numeric](10, 0) IDENTITY (1, 1) NOT NULL ,
[parol] nvarchar(8) COLLATE Cyrillic_General_CI_AS NULL ,
[pwd] nvarchar(8) COLLATE Cyrillic_General_CI_AS NULL ,
[proverka] [int] NULL
) ON [PRIMARY]
GO


Потом я проверяю просто на выбор соответствие между паролем и зашифр-м паролем
автор
select pwdcompare([parol],pwd)
from test1
where [id]=1

В результате получаю 0


Мне кажется я напутал что-то с типами данных можете что-нибудь посоветовать?
13 май 04, 12:39    [675883]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
select pwdencrypt('password')

проблема в [pwd] nvarchar(8) COLLATE Cyrillic_General_CI_AS NULL ... тип данных не очень подходит



select pwdcompare('password',pwdencrypt('password')), pwdcompare('password1',pwdencrypt('password'))
13 май 04, 12:59    [675965]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
автор
проблема в [pwd] nvarchar(8) COLLATE Cyrillic_General_CI_AS NULL ... тип данных не очень подходит


А какой подходит?
13 май 04, 13:02    [675983]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Хехехе :)

Или не трогайте недокументированные функции или учитесь ими пользоваться.
Скажем, через распечатку и заучивание наизусть результатов от

exec master..sp_helptext 'sp_password'
13 май 04, 13:03    [675989]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
>сreate procedure Crypto_hesh as ... while(@i<=5000) ...<

брррр ...
девушки, это sql, не васик, с++ и т.д.

update [test1] set pwd=pwdencrypt(parol)
13 май 04, 13:42    [676124]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
автор
>сreate procedure Crypto_hesh as ... while(@i<=5000) ...<

брррр ...
девушки, это sql, не васик, с++ и т.д.

update [test1] set pwd=pwdencrypt(parol)


По-моему мы разговариваем на разных языках .........................:)

У меня был всего один вопрос на ваш ответ

автор
автор
проблема в [pwd] nvarchar(8) COLLATE Cyrillic_General_CI_AS NULL ... тип данных не очень подходит



А какой подходит?


ps
Дело в том что когда я вставлял
pwdcompare прямо в процедуру то на выходе я получал 1(типа все в порядке)

По этому я уверен либо я не правильно использую pwdcompare , либо вся проблема в типах данных!?
13 май 04, 13:57    [676166]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
>По-моему мы разговариваем на разных языках .........................:)<
по моему тоже я стараюсь на sql, вы - на процедурном псевдоязыке, внешне похожем на sql

>А какой подходит?<
судя по любезно приведенному хинту exec master..sp_helptext 'sp_password'
подойдет varbinary(256)
13 май 04, 14:10    [676195]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
Т.е. нужно?
автор
сreate procedure Crypto_hesh as
declare @i decimal
declare @password varbinary(256)

set @i=1
while(@i<=5000)
begin
select @password=cast(parol as varbinary(256))
from test1
where [id]=@i

update [test1]
set pwd=pwdencrypt(@password)
where [id]=@i


set @i=@i+1
end


А в таблице?

автор
CREATE TABLE [dbo].[test1] (
[id] [numeric](10, 0) IDENTITY (1, 1) NOT NULL ,
[parol] nvarchar(8) COLLATE Cyrillic_General_CI_AS NULL ,
[pwd] varbinary(256),
[proverka] [int] NULL
) ON [PRIMARY]
GO
13 май 04, 14:25    [676256]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
достаточно будет, как я уже писал

update [test1] set pwd=pwdencrypt(parol)

а в таблице - правильно
13 май 04, 14:50    [676338]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
автор
а в таблице - правильно


Спасибо но В таблице теперь везде <Binary>

Дело в том что зашифрованные пароли мне нужно перекопировать в другую таблицу и отправить ее другим людям

И Последний вопрос как проверить с pwdcompare то что я нашифровал (извиняюсь я просто что-то уже не втыкаю в то что выдало exec master..sp_helptext)
13 май 04, 15:19    [676455]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
Просто мне нужно точно знать что я нормально зашифровал пароли (они будут использоваться в каком-то клиентском приложении)
13 май 04, 15:26    [676476]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
ну чего........ может я что-то не так объясняю могу пояснить подробнее .. просто срочно нужно а я уже запутался
13 май 04, 16:23    [676699]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
>как проверить с pwdcompare то что я нашифровал <

я там выше уже это писал, можно выбрать и из таблицы:

select * from test1 where pwdcompare(parol,pwd)<>1
14 май 04, 09:49    [677779]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
Peta12
Guest
2 iSestrin

Спасибо за участие

Последний вопрос( Наверное я вас уже задолбал глупыми вопросами, но просто что-то не сходится) смотрите:

в процедуре я использую как вы советовали
update [test1] set pwd=pwdencrypt(parol),Proverka_pwd=pwdcompare([parol], pwdencrypt([parol]))

все шифруется в pwd (тип данных varbinary(256)) , в Proverka_pwd везде 1(типа все хорошо )

У parol тип данных nvarchar(8)

потом

я проверяю как вы писали select * from test1 where pwdcompare(parol,pwd)<>1
Пусто ничего нет
Даже если я сделаю select * from test1 where pwdcompare(parol,cast(pwd as nvarchar(8)))<>1 или наоборот буду конверт-ть parol или с самого начала сделаю У parol тип данных varbinary(256)(что по идее не правильно все равно будет то же самое при проверке)
14 май 04, 12:37    [678449]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
Пардон , вышестоящее сообщение (под Peta12) мое
14 май 04, 13:10    [678624]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
iSestrin
Member

Откуда: Новосибирск
Сообщений: 3811
>я проверяю как вы писали select * from test1 where pwdcompare(parol,pwd)<>1
Пусто ничего нет <

а это и означает, что все зашибись, все пароли в таблице криптованы правильно

или какую тогда проверку требуется организовать?
14 май 04, 13:10    [678627]     Ответить | Цитировать Сообщить модератору
 Re: О Шифровании паролей  [new]
vitaliy14
Member [заблокирован]

Откуда:
Сообщений: 4996
А точно..... я как то сразу не сообразил
Спасибо большое вам за помощь , теперь я счастлив
С меня шампанское :)
14 май 04, 13:14    [678652]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить