当盐析和散列用户密码时,任何盐显然都会有所帮助.盐有多长时间有什么最佳做法吗?我将盐存储在我的用户表中,所以我希望在存储大小和安全性之间进行最佳权衡.是一个随机的10个字符的盐吗?或者我需要更长的时间?
我刚刚为我的新grails项目添加了注册功能.为了测试它,我通过发送电子邮件和密码进行了注册.我使用bcrypt算法对密码进行哈希处理,然后将其保存到数据库中.
但是,当我尝试使用注册时提供的相同电子邮件和密码登录时,登录失败.我调试了应用程序,发现当我尝试与数据库中已经散列的哈希值进行比较时,为同一密码生成的哈希是不同的,因此登录失败(LoginController中的Registration.findByEmailAndPassword(params.email,hashPassd)) .groovy返回null).
这是我的域类Registration.groovy:
class Registration {
transient springSecurityService
String fullName
String password
String email
static constraints = {
fullName(blank:false)
password(blank:false, password:true)
email(blank:false, email:true, unique:true)
}
def beforeInsert = {
encodePassword()
}
protected void encodePassword() {
password = springSecurityService.encodePassword(password)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的LoginController.groovy:
class LoginController {
/**
* Dependency injection for the springSecurityService.
*/
def springSecurityService
def index = {
if (springSecurityService.isLoggedIn()) {
render(view: "../homepage")
}
else {
render(view: "../index")
}
}
/**
* Show the login page.
*/ …Run Code Online (Sandbox Code Playgroud) 我正在研究一个与许多外部系统API交互的系统:s.他们中的大多数都需要某种身份验证.为了便于使用,有一个"应用程序可以访问"的AppConfig,它存储配置信息以及外部系统的凭据.
我的问题是,将用户名和密码(以明文形式)存储到应用程序配置文件中的外部系统是不是一个坏主意.如果是这样,你怎么避免它?
要访问配置文件,您必须危及服务器的文件系统或其他服务器(当然还有任何开发人员的系统)上的git存储库.我一直在考虑加密配置文件中的密码不会增加安全级别,因为加密密钥也必须存储在某个地方.我错了吗?
我非常感谢您解释如何解决这个问题的答案.
解
好的,所以这是我的最终解决方案.我使用OpenSSL创建了一个简单的库来加密和解密我的敏感数据.加载配置时,将从用户检索密钥,但在存储在文件中的生产服务器上除外.它仍然不是最佳解决方案,但它比我以前的"解决方案"更好.
谢谢您的回答.我会接受韦恩的回答,因为它是最有用的.