首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中有没有一种方法来散列来自MySQL的数据帧中的密码?

在R中有没有一种方法来散列来自MySQL的数据帧中的密码?
EN

Stack Overflow用户
提问于 2020-12-14 17:13:49
回答 1查看 38关注 0票数 0

我对R语言比较陌生,我在做散列密码时遇到了困难。我做的那个,只对第一列进行了散列。我想分别对每一列进行散列。

代码语言:javascript
运行
复制
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)

这就是我得到的

代码语言:javascript
运行
复制
user1
123456
$7$C6..../....eo0MryfxLoInICi3RRGLBj48UCJD4XtGCbdUb7JhnO/$i/gw1MWGfD8Ri7l5l/Nvx.qUhvRTlKHWVssuiD4MV85
admin
User One

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

散列密码应该不同于我的理解,但我做不到。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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将返回单个值。不是你想要的!

所以更好的代码是

代码语言:javascript
运行
复制
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")
)

检索用户名和密码的方式也有点复杂。您可以在一个查询中获取它们

代码语言:javascript
运行
复制
sqluser <- "SELECT userName, password FROM staff"
sqluser <-data.frame(dbGetQuery(pool, sqluser ))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65286320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档