我正在使用PHP创建应用程序,并且要求必须能够解密密码,以避免将用户数据库切换到不同系统时将来出现问题.考虑到无法修改此未来系统的密码方法,我需要纯文本密码才能生成密码.
计划是使用存储在服务器上的公钥加密用户的密码.通过加密输入和比较结果来完成认证.没有解密完成.能够解密的私钥存储在异地以供以后使用.
您建议使用哪种加密/解密算法?当您认为攻击者无法使用私钥时,加密密码是否仍然像散列(MD5/SHA1)一样安全?
好的,我终于理解了bcrypt,它是如何工作的,以及如何将它存储在数据库中,所以我几乎要好好去.现在的问题是选择使用哪种bcrypt实现与PHP 5.3.
我疯狂地看着所有不同的解决方案,我不确定哪一个是最推荐和最安全的,所以我再次转向你们.
以下是我发现的:
1)https://gist.github.com/marcoarment/1053158
2)http://www.openwall.com/phpass/
4)......别的什么?
这些可以互换,还是产生不同的哈希?我想认为,既然它们都是"bcrypt",他们会产生相同的结果,但我不知道(我测试1)及2)以上,他们似乎是可互换的,因为所生产的散列1)上确认2)).
那么PHP的推荐解决方案是5.3什么?
我想知道在数据库中使用哪种方法来存储密码.我使用MD5实现了它,但根据一些帖子,SHA1更安全.还有其他更安全的方法吗?请帮我找出保护密码的最佳方法.
我倾向于将用户密码存储在内存中供以后使用.
var credentials = {};
function register(username,password){
//when users click sign up
credentials.username = username;
creadentials.password = password;
}
function login(){
//Users can click login at anytime. Or they just don't.
ajax('/User/login',credentials).then(function(){
credentials = {};
});
}
Run Code Online (Sandbox Code Playgroud)
我应该担心这种方法的安全任务吗?如果这是一个坏主意,攻击者将如何检索密码?
我正在考虑使用password_hash()函数来加密用户密码.我知道如果你没有提供它,这个函数会默认生成salt,甚至鼓励使用默认的salt而不是你自己的salt.我目前正在权衡3个选项,无法决定使用哪个,所以如果你能帮助我,我会很感激.
1.选项:password_hash(),默认为salt
$passwordInput = $_POST['password'];
$passwordHash = password_hash($passwordInput, PASSWORD_BCRYPT);
//INSERT $passwordHash INTO DATABASE
Run Code Online (Sandbox Code Playgroud)
2.选项:带自定义盐的password_hash()
$options = ['salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)];
$passwordInput = $_POST['password'];
$passwordHash = password_hash($passwordInput, PASSWORD_BCRYPT, $options);
//INSERT $passwordHash INTO DATABASE
Run Code Online (Sandbox Code Playgroud)
3.选项:根本不使用password_hash()
我将此选项基于2014年的帖子:基于表单的网站身份验证的权威指南.基本上如果它是一个比password_hash()更安全的方法,我会使用这样的东西:
$salt = uniqid(rand(0, 1000000);
$passwordInput = $_POST['password'];
$password = hash('sha512', $salt . $passwordInput);
//INSERT $password AND $salt INTO DATABASE SEPARATELY
Run Code Online (Sandbox Code Playgroud) 这实际上可能更像是一个概念性问题.在Asp.Net Identity中,每次执行时,PasswordHasher都会为同一个字符串生成不同的哈希:
new PasswordHasher.HashPassword("myString");
Run Code Online (Sandbox Code Playgroud)
现在,如果由于某种原因我需要手动将用户的输入与数据库中保存的密码进行比较,那么当我散列用户输入的密码时,我很可能会得到一个不同的字符串,而不是存储在数据库中的密码.
有人可以向我解释一下吗?不应该在相同的散列中散列相同的字符串,如果不是,Identity本身如何实现两个不同的散列实际上是相同的?
asp.net hash password-encryption asp.net-identity asp.net-identity-2
嗨,我正在使用HP fortify查找我的应用程序的所有漏洞,现在我正在尝试解决一个看起来很基本的但我无法做到的.
问题是关于配置中的密码.我有一个Web应用程序,并在其中的属性文件中.
somePassword=passwordPlainText
Run Code Online (Sandbox Code Playgroud)
我同意这是错误的,然后我尝试使用http://www.jasypt.org/encrypting-configuration.html,OBS,CRYPT和ENC类型对几种方法进行混淆.但是当我扫描我的代码时,我总是从强化中得到相同的警告.难道我做错了什么?
谢谢
我需要创建一个PBKDF2-SHA256密码哈希,但是遇到了一些麻烦.
我下载了Bouncy Castle的回购,但在单元测试中找到了我想要的东西.
在这里找到了一些示例代码,但这只是SHA1.代码的关键点是:
/// <summary>
/// Computes the PBKDF2-SHA1 hash of a password.
/// </summary>
/// <param name="password">The password to hash.</param>
/// <param name="salt">The salt.</param>
/// <param name="iterations">The PBKDF2 iteration count.</param>
/// <param name="outputBytes">The length of the hash to generate, in bytes.</param>
/// <returns>A hash of the password.</returns>
private static byte[] PBKDF2(string password, byte[] salt, int iterations, int outputBytes)
{
var pdb = new Pkcs5S2ParametersGenerator();
pdb.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt,
iterations);
var key = (KeyParameter)pdb.GenerateDerivedMacParameters(outputBytes * 8);
return key.GetKey(); …Run Code Online (Sandbox Code Playgroud) 使用powershell命令压缩文件夹后:
powershell -Command "& {Compress-Archive -Update -Path 'C:\myfolder' -CompressionLevel Optimal -DestinationPath C:\myfolder.zip}"
Run Code Online (Sandbox Code Playgroud)
是否有另一个 powershell 命令来密码保护/加密生成的 myfolder.zip 存档文件?
compression powershell password-protection password-encryption
hash ×3
passwords ×3
php ×3
c# ×2
security ×2
asp.net ×1
bcrypt ×1
bouncycastle ×1
compression ×1
fortify ×1
javascript ×1
powershell ×1
python ×1
scrypt ×1