我对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散列密码应该不同于我的理解,但我做不到。谢谢你的帮助。
发布于 2020-12-14 18:47:34
您使用从查询结果构建的data.frame作为最终表达式中的列。
data.frame是列的列表。当给定一个列的列表时(这是当你提供user=(sqluser)时发生的),data.frame函数能够处理并将在最终的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 ))https://stackoverflow.com/questions/65286320
复制相似问题