Как генерировать неслучайные пароли словаря с помощью Python?

Решение Oracle. Во второй строке помещен отчетный год.

  • mc подсчитывает новые и уходящие лица в месяц
  • t - это иерархический подсчет подзапроса opening и closing для каждый месяц. Первая часть, якорь, подсчитывает записи в таблицах entry и resign в течение более старых лет, это наша отправная точка. К этому якорю мы прикладываем значения по месяцам, просматривая их в mc
  • , последний шаг pivot и порядок, добавленный здесь только для представления данных по вашему запросу.

Запрос:

with 
  y as (select 2016 yr from dual),
  mc as (   
    select mm, sum(a) a, sum(c) c
      from ( select extract (month from entrydate) mm, 1 a, 0 c
               from entry, y where extract(year from entrydate) = yr
             union all
             select extract (month from resigndate) mm, 0 a, 1 c
               from resign, y where extract(year from resigndate) = yr) 
      group by mm ),
  t(mm, o, a, r, c) as (
    select 0, 0, 0, 0, 
           ( (select count(1) from entry where extract(year from entrydate) < yr)
           - (select count(1) from resign where extract(year from resigndate) < yr) ) 
      from y
    union all
    select t.mm + 1, t.c, mc.a, mc.c, t.c + nvl(mc.a, 0) - nvl(mc.c, 0)
      from t left join mc on mc.mm = t.mm + 1 
      where t.mm + 1 <= 12)
select * 
    from (
        select * from t
            unpivot (cnt for type in (o, a, r, c)))
    pivot (sum(cnt) for mm in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12))
    order by case type when 'O' then 1 when 'A' then 2 
                       when 'R' then 3 when 'C' then 4 
             end

Результат для предоставленных данных и год 2016:

TYPE      1      2      3      4      5      6      7      8      9     10     11     12
---- ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------
O         0      1      2      3      4      4      4      4      4      4      3      2
A         1      1      1      1                                         0      0 
R         0      0      0      0                                         1      1 
C         1      2      3      4      4      4      4      4      4      3      2      2

Это в основном стандартный SQL, вам могут потребоваться функции изменения, такие как extract, на их эквивалент SQLServer , Надеюсь, это поможет.

0
задан CurtisOnTheRoad 19 January 2019 в 12:58
поделиться

2 ответа

Вы можете определить словарь, ключ как прописные буквы и значение как всевозможную комбинацию этого символа.

rand_dict = {
    "A": ["@", "a", "A"],
    "B": ["b", "3", "B"],
    "C": ["c", "(", "C"],
    "D": ["D", "d", "6"],
    "E": ["E", "e"],
    "F": ["F", "f"],
    "G": ["6", "G", "g", "9"],
    "H": ["h", "H"],
    "I": ["I", "i", "!"],
    "J": ["J", "j"],
    "K": ["k", "K"],
    "L": ["l", "L", "1"],
    "M": ["m", "M"],
    "N": ["n", "N"],
    "O": ["O", "o", "0"],
    "P": ["p", "P"],
    "Q": ["Q", "q"],
    "R": ["R", "r"],
    "S": ["s", "S", "$"],
    "T": ["T", "t"],
    "U": ["U", "u"],
    "V": ["v", "V", "<"],
    "W": ["w", "W"],
    "X": ["x", "X"],
    "Y": ["Y", "y"],
    "Z": ["z", "Z"],
}

перетасовывают все возможные списки, циклически выводя строку

foo = "MyExGirlFriendIsAnInsult"

bar = []
for i in list(foo.upper()):
    random.shuffle(rand_dict[i], random.random)
    bar.append(rand_dict[i][0])

print("".join(bar))

как:

Myex9Ir1fR!EnD!s@NInsulT
myEXGiRLfRIeNdI$AnIN$uLT
MYEX6Irlfrien6!$aNInsUlt
MYEXG!R1fr!ENdISAn!nSu1t
myExg!rLFrIEn6is@NiN$u1T
0
ответ дан SACHIN CHAVAN 19 January 2019 в 12:58
поделиться

Начните с составления списка со всеми возможными заменами символов. Для краткости я сократил ваш пример, и вы, конечно, захотите встроить его в код, а не указывать список как литерал:

mylist = ["Mm", "yY", "Gg", "I1i" , "rR", "Ll", "Fr", "Ii1", "Ee3", "nN", "dD"]

После того, как у вас есть все параметры, используйте itertools чтобы получить произведение всех этих опций:

import itertools
for f in itertools.product(*mylist): 
    print (''.join(f))

Это дает:

MyGIrLFRIEnd
MyGIrLFRIEnD
... 13,820 more ..
mYgiRlfr13Nd
mYgiRlfr13ND
0
ответ дан BoarGules 19 January 2019 в 12:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: