Есть ли способ в R хэшировать пароль в фрейме данных из MySQL?

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

library(pool)
library(RMySQL)

sqlname <- "SELECT userName FROM staff "
sqlname <-data.frame(dbGetQuery(pool, sqlname))

sqlpassword <- "SELECT password FROM staff"
sqlpassword <-data.frame(dbGetQuery(pool, sqlpassword))

user_base <- data_frame(
 user = (sqlname),
 password = (sqlpassword), 
 password_hash = sapply((sqlpassword), sodium::password_store),
 permissions = c("admin", "standard"),
 name = c("User One", "User Two")
)

View(user_base)

Вот что у меня есть

user1
123456
$7$C6..../....eo0MryfxLoInICi3RRGLBj48UCJD4XtGCbdUb7JhnO/$i/gw1MWGfD8Ri7l5l/Nvx.qUhvRTlKHWVssuiD4MV85
admin
User One

user2
147852
$7$C6..../....eo0MryfxLoInICi3RRGLBj48UCJD4XtGCbdUb7JhnO/$i/gw1MWGfD8Ri7l5l/Nvx.qUhvRTlKHWVssuiD4MV85
standard
User Two

Хэш-пароль должен отличаться от моего понимания, но я не могу этого сделать. Спасибо за помощь.

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы используете data.frame, который вы строите из результата запроса, в качестве столбца в своем окончательном выражении.

data.frame — это список столбцов. Функция data.frame при наличии списка столбцов (это то, что происходит, когда вы предоставляете user=(sqluser)) способна справиться и обработает отдельные столбцы в финале data.frame (то есть пользователь получит один столбец в sqluser). Проблема заключается в вашем вызове sapply((sqlpassword), ...), который будет перебирать не отдельные пароли, а столбцы sqlpassword data.frame), что в сочетании с тем фактом, что при предоставлении вектора строки sodium::password_store вернет одно значение. Не то, что вы ожидаете!

так что лучший код

user_base <- data.frame(
  user = (sqlname$userName),
  password = (sqlpassword$password), 
  password_hash = sapply((sqlpassword$password), sodium::password_store),
  permissions = c("admin", "standard"),
  name = c("User One", "User Two")
)

Способ получения имени пользователя и пароля также немного запутан. Вы можете получить их в одном запросе

sqluser <- "SELECT userName, password FROM staff"
sqluser <-data.frame(dbGetQuery(pool, sqluser ))

Большое спасибо. Ваше объяснение действительно дало мне представление о RMySQL. Да пребудет с тобой сила.

Afiq 15.12.2020 01:48

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