Анализ пароля R

Я хочу проанализировать пароли для уни проекта. Я хотел бы дать пароли R 50 для анализа, глядя на комбинации нижнего регистра, верхнего регистра, цифр и специальных символов. Я работаю с некоторым кодом R, взятым из https://datadrivensecurity.info/blog/posts/2014/Feb/ripal/, и я не могу заставить его работать.

В частности, R распознает только строчные буквы паролей, я не могу заставить его распознавать пароли, которые имеют другие комбинации символов, такие как верхний и нижний регистр, нижний и специальный и т. д., код продолжает возвращаться с 0%, когда я знаю, что есть пароли, соответствующие этим критериям, в 50 из моего фрейма данных.

Есть ли что-то, что я делаю неправильно, мои аргументы/код R правильны?

Любая помощь очень ценится.

  contains.only.lower.alpha <- sum(grepl("^[a-z]+$",Final_DF$Pswd))
contains.only.upper.alpha <- sum(grepl("^[A-Z]+$",Final_DF$Pswd))
contains.only.numeric <- sum(grepl("^[0-9]+$",Final_DF$Pswd))
contains.only.special <- sum(grepl("^[:punct:]+$",Final_DF$Pswd))

contains.both.lower.and.upper <- only.lower.alpha + only.upper.alpha
contains.both.lower.and.numeric <- only.lower.alpha + only.numeric
contains.both.lower.and.special <- only.lower.alpha + only.special
contains.both.upper.and.numeric <- only.upper.alpha + only.numeric
contains.both.upper.and.special <- only.upper.alpha + only.special
contains.both.numeric.and.special <- only.numeric + only.special

contains.lower.upper.and.numeric <- only.lower.alpha + only.upper.alpha + only.numeric
contains.lower.upper.numeric.and.special <- only.lower.alpha + only.upper.alpha + only.numeric + only.special

print(sprintf("Only lowercase alpha = %d, (%3.3f%%)", only.lower.alpha, 100*(only.lower.alpha/50)))
print(sprintf("Only uppercase alpha = %d, (%3.3f%%)", only.upper.alpha, 100*(only.upper.alpha/50)))
print(sprintf("Only numeric = %d, (%3.3f%%)", only.numeric, 100*(only.numeric/50)))
print(sprintf("Only special = %d, (%3.3f%%)", only.special, 100*(only.special/50)))

print(sprintf("Both lower and upper alpha = %d, (%3.3f%%)", both.lower.and.upper, 100*(both.lower.and.upper/50)))
print(sprintf("Both lower and numeric = %d, (%3.3f%%)", both.lower.and.numeric, 100*(both.lower.and.numeric/50)))
print(sprintf("Both lower and special = %d, (%3.3f%%)", both.lower.and.special, 100*(both.lower.and.special/50)))
print(sprintf("Both upper and numeric = %d, (%3.3f%%)", both.upper.and.numeric, 100*(both.upper.and.numeric/50)))
print(sprintf("Both upper and special = %d, (%3.3f%%)", both.upper.and.special, 100*(both.upper.and.special/50)))
print(sprintf("Both.numeric.and.special = %d, (%3.3f%%)", both.numeric.and.special, 100*(both.numeric.and.special/50)))

print(sprintf("Lower.upper.and.numeric = %d, (%3.3f%%)", lower.upper.and.numeric, 100*(lower.upper.and.numeric/50)))
print(sprintf("Lower.upper.numeric.and.special = %d, (%3.3f%%)", lower.upper.numeric.and.special, 100*(lower.upper.numeric.and.special/50)))

Это 50 паролей, с которыми я работаю, которые я сгенерировал с помощью R. Я перегенерирую их, чтобы получить больший разброс, чтобы включить все специальные и т. д., После того, как я узнаю, что смогу заставить код работать.

> Final_DF$Pswd

[1] «обезьяна» «iloveyou» «дракон» «jbI2pnK$xi» «пароль» «компьютер» «!qessw»
[8] "tUNh&SSm6!" "солнце" "wYrUeWV" "супермен" "samsung" "utoXGe6$" "мастер"
[15] "wjZC&OvXX" "0R1cNTm9sGir" "Fbuu2bs89?" "покемон" "секрет" "x&W1TjO59" "бастер"
[22] "фиолетовый" "блеск" "цветок" "марина" "Tg%OQT$0" "SbDUV&nOX" "арахис"
[29] «ангел» «?1LOEc4Zfk» «компьютер» «человек-паук» «ничего» «$M6LgmQgv$» «оранжевый»
[36] «рыцарь» «американец» «глубинка» «TfuRpt3PiZ» «воздух» «прибой» «lEi2a$$eyz»
[43] «свидание» «V$683rx$p» «ньюкасл» «недвижимость» «фокси» «имбирь» «кофе»
[50] «ноги»

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

Ronak Shah 24.12.2020 14:21

Где lower.upper.and.numeric и lower.upper.numeric.and.special? Я согласен с Ронаком в том, что нам нужен образец ввода (с использованием dput) и ожидаемый результат. Для чего здесь предназначен /50? Проблема с методологией заключается в том, что вы специально ищете строки, которые являются только числами, например 124234, или только строчными буквами, например abcas, а затем пытаетесь объединить эти две части логики, чтобы найти, есть ли 123abc там. Вам нужно будет разрешить другое значение в строке, например contains.upper.alpha <- grepl("^.*[A-Z]+.*$",Final_DF$Pswd)

Jonny Phelps 24.12.2020 15:59

Привет, @JonnyPhelps, 50 — это общее количество проверяемых паролей, я использую его для расчета %.

Marty 24.12.2020 16:23

Я думаю, что мне нужно привести в порядок/сделать значения более понятными, содержит гораздо лучший способ объяснить, что проверяемый пароль имеет верхний и нижний регистр и т. д. На данный момент проблема в том, что я не могу заставить R распознать и подсчитать пароль, который имеет как верхний, так и нижний регистр

Marty 24.12.2020 16:27

Что-то вроде data <- "abcABC"; grepl("^.*[a-z]+.*$",data) & grepl("^.*[A-Z]+.*$",data). Вам нужны условия, которые проверяют, есть ли строчные или прописные буквы, а затем объединяют их. Таким образом, вы можете обернуть это суммой, т.е. выполнить сумму после выполнения комбинированного логического теста.

Jonny Phelps 24.12.2020 16:44

@RonakShah, я предоставил данные, с которыми работаю, если это поможет

Marty 24.12.2020 16:50

@JonnyPhelps, спасибо, я попробовал ваше предложение, но оно все равно не работает так, как хотелось бы, [1] "abcABC" [1] ЛОЖЬ ЛОЖЬ ЛОЖЬ ЛОЖЬ ИСТИНА ЛОЖЬ ЛОЖЬ ЛОЖЬ ИСТИНА ИСТИНА ЛОЖЬ ИСТИНА ЛОЖЬ ЛОЖЬ ИСТИНА ЛОЖЬ ИСТИНА ИСТИНА ИСТИНА ИСТИНА ЛОЖЬ [19] ] FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE [37] FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE. Пароль номер 4, например, jbI2pnK$xi, который этот новый код читает как истинный, когда он должен быть ложным, поскольку он содержит нижний, верхний, цифры и специальные символы.

Marty 24.12.2020 17:00

Я знаю, что мой список паролей содержит 34 пароля только в нижнем регистре, 2 пароля, которые имеют только нижний и верхний регистр, 1 пароль со строчными буквами и специальный, 2 пароля со строчными, прописными и специальными, 11 паролей с нижними, верхними, номера и спец.

Marty 24.12.2020 17:06

Тест работает для jbI2pnK$xi, так как у него есть нижний и верхний регистр. Вам нужно расширить эту логику, например, если вы хотите нижний, верхний и специальный, вам нужно продолжать складывать условия, например grepl("^.*[a-z]+.*$",data) & grepl("^.*[A-Z]+.*$",data) & grepl(".*^[:punct:]+.*$")

Jonny Phelps 24.12.2020 17:18

Поэтому определите базовые условия для содержания нижнего, верхнего, специального и т. д., затем объедините их по мере необходимости, а затем просуммируйте в конце. Вы можете заменить 50 на nrow(Final_DF), чтобы стандартизировать это.

Jonny Phelps 24.12.2020 17:19

Кроме того, поделитесь данными с dput и скопируйте этот вывод :)

Jonny Phelps 24.12.2020 17:20

@JonnyPhelps извините, я не могу заставить работать dput в комментариях, есть идеи? Используя ваш последний пример, я получаю два вывода TRUE для tUNh&SSm6! и utoXGe6$, которые содержат нижний, верхний, специальный и числа, когда я хотел только нижний, верхний и специальный. Мне интересно, должна ли логика включать аргументы исключения, использование регулярных выражений и т. д., Чтобы R знал, что не следует включать tUNh & SSm6! в этом поиске, так как он содержит число и не соответствует критериям

Marty 24.12.2020 18:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
12
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Разобрался, нужна комбинация логических операторов для каждой комбинации символов пароля

grepl("^(?!.*[[:lower:]]).*$",df, perl = TRUE)

Другие вопросы по теме