Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция на PLSQL, генерации паролей 
V
    Опции темы
dartx
Дата 6.4.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



по правилу:
- случайная согласная буква латинская маленькая
- случайная гласная буква латинская маленькая
- случайная цифра
- с 50% вероятностью:
- или случайная цирфа
- или случайные согласная+гласная буква
- случайная цирфа
- случайные согласная+гласная буква


Как можно реализовать?

PM MAIL   Вверх
jsa
Дата 7.4.2006, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

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



не совсем понял задачу, нужно генератор паролей сделать?


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
dartx
Дата 7.4.2006, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(jsa @ 7.4.2006, 08:35)
не совсем понял задачу, нужно генератор паролей сделать?

Ну да, именно это.
PM MAIL   Вверх
LSD
Дата 7.4.2006, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Самый простой способ написать ее на Java, что-то типа:
Код
create or replace and compile java source named PWD_GEN_J as
import java.util.Random;

public class PasswordGenerator
{
  public static final char[] LATIN_UPPERCASE =
      {'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' ,
       'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z'};

  public static final char[] LATIN_LOWERCASE =
      {'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' ,
       'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z'};

  public static final char[] DIGITS =
      {'0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9'};

  public static final char[] SYMBOLS =
      {'!' , '@' , '#' , '$' , '%' , '^' , '&' , '*' , '(' , ')' , '_' , '+' , '-' , '=' , '[' ,
       ']' , '{' , '}' , ';' , '\'' , ':' , '"' , ',' , '.' , '/' , '<' , '>' , '?' , '`' , '~'};

  private static Random rnd = new Random();

  public static String generate(int length, boolean latinUpper, boolean latinLower, boolean digits, boolean symbols)
  {
    int l = latinUpper ? LATIN_UPPERCASE.length : 0;
    l += latinLower ? LATIN_LOWERCASE.length : 0;
    l += digits ? DIGITS.length : 0;
    l += symbols ? SYMBOLS.length : 0;

    if(l == 0)
      throw new IllegalArgumentException("No symbols selected");

    char[] sym = new char[l];
    l = 0;
    if(latinUpper)
    {
      System.arraycopy(LATIN_UPPERCASE, 0, sym, l, LATIN_UPPERCASE.length);
      l += LATIN_UPPERCASE.length;
    }
    if(latinLower)
    {
      System.arraycopy(LATIN_LOWERCASE, 0, sym, l, LATIN_LOWERCASE.length);
      l += LATIN_LOWERCASE.length;
    }
    if(digits)
    {
      System.arraycopy(DIGITS, 0, sym, l, DIGITS.length);
      l += DIGITS.length;
    }
    if(symbols)
    {
      System.arraycopy(SYMBOLS, 0, sym, l, SYMBOLS.length);
      l = SYMBOLS.length;
    }

    StringBuffer buffer = new StringBuffer(length);
    for(int i = 0; i < length ; i++)
      buffer.append(sym[rnd.nextInt(sym.length)]);

    return buffer.toString();
  }
}
/

Код
create or replace function GENERATE_PASSWORD(length          number,
                                             latin_uppercase boolean,
                                             latin_ljwercase boolean,
                                             digits          boolean,
                                             symbols         boolean)
  return varchar2 as
  language java name 'PasswordGenerator.generate(int, boolean, boolean, boolean, boolean) return java.lang.String';



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
dartx
Дата 7.4.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В том-то и дело, что проще на джава, а надо на PL/SQL, абыдна однакоsmile
Я в PL/SQL как-то не очень.
PM MAIL   Вверх
LSD
Дата 7.4.2006, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Цитата(dartx @ 7.4.2006, 18:41 Найти цитируемый пост)
надо на PL/SQL, абыдна однако

Почему?!
Oracle, начиная с версии 8i, спокойно поддерживает Java, без всяких дополнительных ухищрений. Зачем создавать себе трудности, а затем их с честью преодолевать?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
dartx
Дата 8.4.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну дело в том что почти вся бизнес логика реализована на PL/SQL, и почти вся работа связанна с ним. Со своим уставом в чужой монастырь не пойдешь ведь?

Ну я пока разобрался со рандомом и делаю примерно так:
Код

     DBMS_RANDOM.initialize(DBMS_UTILITY.get_time);
     pcnt := 26;
     Result := pcnt * BITAND(ABS(DBMS_RANDOM.random), 65535) / 65535;


Теперь надо разобраться со строками в PL/SQL:
Самое неприятное, что пароль должен генирироваться по правилам.
То есть есть мысль создать три массива символов: с полным набором символов(гласные, согласные, цифры),
только гласные, только согласные, цифры. Потом случайно выбрать из полного набора, затем анализируя выбранный символ, ставить либо из гласных, либо из согласных, либо из цифр.
PM MAIL   Вверх
LSD
Дата 8.4.2006, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Можно получить с помощью ASCII получить диапазон кодов символов, затем генерируем число из диапазона и с помощью CHR делаем из него строку:
Код
declare
  BEG_IDX number;
  END_IDX number;
  RND     number;
  RES     varchar2;
begin
  BEG_IDX := ASCII('A');
  END_IDX := ASCII('Z');
....
  RES := RES || CHR(RND);
end;
/



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
dartx
Дата 8.4.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да но ведь тогда будет генирится пароль просо из случайных чисел, а надо по правилу, например:
acedeh или merotj, ну и так далее, чтобы были легко запоминаюшимися.
PM MAIL   Вверх
LSD
Дата 9.4.2006, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


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

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



Это только набросок. Я просто показал как сгенерировать букву из заданного множества. А дальше уже генерируешь пароль по своим правилам:
  • случайная согласная буква латинская маленькая
  • случайная гласная буква латинская маленькая
  • случайная цифра
  • ....



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
dartx
Дата 9.4.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за помощь!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

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


 




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


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

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