R 中有没有办法从 MySQL 中散列数据框中的密码?

is there a way in R to hash password in data frame from 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
$C6..../....eo0MryfxLoInICi3RRGLBj48UCJD4XtGCbdUb7JhnO/$i/gw1MWGfD8Ri7l5l/Nvx.qUhvRTlKHWVssuiD4MV85
admin
User One

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

哈希密码应该和我理解的不一样,但我没有做到。感谢您的帮助。

您使用从查询结果构建的 data.frame 作为最终表达式中的列。

A data.frame 是列的列表。 data.frame 函数在给定列列表时(这是当您提供 user=(sqluser) 时发生的情况)能够处理并将处理最终 data.frame 中的单个列(即用户将获得 sqluser 中的单列)。问题出在您对 sapply((sqlpassword), ...) 的调用中,它不会迭代单个密码,而是迭代 sqlpassword data.frame) 的列,这与提供字符串向量时的事实相结合,sodium::password_store 将 return 单个值。不是你所期望的!

所以更好的代码是

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 ))