powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Генерация пароля, проблема с русскими буквами
23 сообщений из 23, страница 1 из 1
Генерация пароля, проблема с русскими буквами
    #39963431
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код для генерации пароля
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
procedure cxButton1Click(Sender: TObject);
var
 pass : string;
 passl: string;
 passk: string;
 passt : string;
 passm: string;
 passo: string;
 L: Integer;
begin
  begin
    pass := '';
    repeat
    L := Random(256);
    if Chr(L) in ['0'..'9' ] then
    begin
    pass := pass+Chr(L);
    end;
    until Length(pass)=1;
    ePassword.Text := pass;
  end;

  begin
    repeat
    L := Random(256);
    if (Pos (Chr(L), '!@#$%^&*_+-') > 0) then
    begin
    passl := passl+Chr(L);
    end;
    until Length(passl)=1;
    ePassword.Text := pass + passl;
  end;

  begin
    repeat
    L := Random(256);
    if Chr(L) in ['a'..'z'] then
    begin
    passk := passk+Chr(L);
    end;
    until Length(passk)=2;
    ePassword.Text := pass + passl +  passk;
  end;

  begin
    repeat
    L := Random(256);
    if Chr(L) in ['A'..'Z'] then
    begin
    passt := passt+Chr(L);
    end;
    until Length(passt)=2;
    ePassword.Text := pass + passl + passk + passt;
  end;

  begin
    repeat
    L := Random(256);
  //  if (Pos (Chr(L), 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя') > 0) then
    if Chr(L) in ['А'..'Я'] then
    begin
    passm := passm+Chr(L);
    end;
    until Length(passm)=2;
    ePassword.Text := pass + passl + passk + passt + passm;
  end;

  begin
    repeat
    L := Random(256);
//    if (Pos (Chr(L), 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ') > 0) then
    if Chr(L) in ['а'..'я'] then
    begin
    passo := passo+Chr(L);
    end;
    until Length(passo)=2;
    ePassword.Text := pass + passl + passk + passt + passm + passo;
  end;
  DialogInfo('Пароль сгенерирован:' + ePassword.Text );

end;


собственно на скриншоте можете увидеть, что русские буквы поплыли, что с этим можно сделать?
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963436
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt,

А версия Delphi какая?
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963440
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, Delphi Berlin 10.1 XE. На delphi 7 таких проблем нету.
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963452
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt
собственно на скриншоте можете увидеть, что русские буквы поплыли

Идеальный пароль.

neteurt
Код: pascal
1.
DialogInfo


Ансишная процедура?
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963454
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt
alekcvp, Delphi Berlin 10.1 XE. На delphi 7 таких проблем нету.

Код: pascal
1.
2.
3.
  L := Random(256);
//    if (Pos (Chr(L), 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ') > 0) then
    if Chr(L) in ['а'..'я'] then


Ну тогда очевидно что это и не будет работать. in не работает с юникодом, у русских символов коды намного больше 256.

Надо делать как-то так:
Код: pascal
1.
2.
L := Ord('а') + Random(33); // первая буква + смещение
passo := passo+Chr(L);

И не надо никаких циклов.
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963459
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,

сразу писал так
Код: pascal
1.
(Pos (Chr(L), 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ') > 0)


но на ХЕ делфи зафисала на этом месте
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963467
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, ваш код генерирует только маленькие буквы, а как большие можно так сгенерировать?
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963468
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

это доработанная функция MessageShow
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963470
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt
это доработанная функция MessageShow

Смотря ведь как доработанная... Но она юникод не понимает.
alekcvp
Надо делать как-то так:

CharInSet не вариант?
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963476
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

DialogInfo это для удобства чтобы можно было посмотреть, в плавающем веди русские буквы выводятся и в Edit
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963483
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt
DialogInfo это для удобства чтобы можно было посмотреть, в плавающем веди русские буквы выводятся и в Edit

Значит проблема в том, что в юникоде русские буквы чуть другие коды имеют.

https://www.embarcadero.com/images/dm/technical-papers/delphi-and-unicode-marco-cantu.pdf

Замени все string на AnsiString.
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963490
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, с AnsiString выводит вместо русских букв английские пример последнее четыре символа должны были быть русскими "3&vuGRIYiy"
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963509
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt,

видимо проще самому написать. :)

Chr раньше просто преобразовывал тип, сейчас это нормальная конвертация. Замени на AnsiChar. Вдруг поможет?
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963533
neteurt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,
сделал так
Код: pascal
1.
2.
3.
4.
  R := RandomRange(1,33);
    passo := Copy('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', R, 1);
    R := RandomRange(1,33);
    passo := passo + Copy('АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', R, 1);
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963556
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt
alekcvp, ваш код генерирует только маленькие буквы, а как большие можно так сгенерировать?

Код: pascal
1.
2.
3.
4.
5.
L := Ord('а') + Random(33); // маленькие русские
L := Ord('А') + Random(33); // большие русские
L := Ord('a') + Random(26); // маленькие латинские
L := Ord('A') + Random(26); // большие латинские
L := Ord('0') + Random(10); // цифры


Может вам сначала книжки какие-нибудь по программированию для начинающих почитать, м?..
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963557
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
alekcvp
Надо делать как-то так:

CharInSet не вариант?

А вы в её исходники смотрели? Она только TAnsiCharSet понимает, насколько я понял.
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963582
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Она только TAnsiCharSet понимает, насколько я понял.
Множество, по определению, не может содержать элементы больше чем 255
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963644
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
alekcvp
Она только TAnsiCharSet понимает, насколько я понял.
Множество, по определению, не может содержать элементы больше чем 255

Тут важный момент: больше 255 элементов или элементы со значением (Ord()) больше 255?
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963715
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neteurt,

объяви L как AnsiChar
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963807
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробежал глазами, особо не вникал. А не проще сделать строчную константу со всеми допустимыми символами и по рандому дергать оттуда символы?
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963824
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
Пробежал глазами, особо не вникал. А не проще сделать строчную константу со всеми допустимыми символами и по рандому дергать оттуда символы?

Ну в хорошем пароле должны присутствовать все классы, а с тупым рандомом так не получится.
Видел в инете генератор фонетических паролей - вот это вещь была, жаль там описание алгоритма на пару страниц. Он пароли генерировал легко запоминающиеся на основании слогов, замены подходящих букв цифрами и символами и т.п. Что-то типа: Th3b!RD0f
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963929
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
А не проще сделать строчную константу со всеми допустимыми символами и по рандому дергать оттуда символы?

+1
...
Рейтинг: 0 / 0
Генерация пароля, проблема с русскими буквами
    #39963999
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Тут важный момент: больше 255 элементов или элементы со значением (Ord()) больше 255?
Значения элементов может быть от 0 до 255.

Можешь проверить
Код: pascal
1.
2.
type
  TSet = set of 300..315;
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Генерация пароля, проблема с русскими буквами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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