问题标签 [password-encryption]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
security - 注册时如何保护密码?
网站可以通过多种方式存储您的密码,其中一些方式比其他方式更安全。下面简要介绍了最流行的方法,以及它们对数据安全的意义。
方法一:纯文本密码 工作原理:网站存储密码的最简单方式是纯文本。这意味着在他们的服务器上的某处,存在一个数据库,其中包含您的用户名和密码以人类可读的形式(也就是说,如果您的密码是 testing123,它作为 testing123 存储在数据库中)。当您在网站上输入您的凭据时,它会根据数据库检查它们是否匹配。从安全角度来看,这是最糟糕的方法,而且大多数信誉良好的网站都不以纯文本形式存储密码。如果有人破解了这个数据库,每个人的密码都会立即被泄露。
我的强密码重要吗?没门。无论您的密码有多长或多强,如果它以纯文本形式存储并且网站被黑客入侵,任何人都可以轻松访问您的密码,无需任何工作。在向朋友或其他容易猜到密码的人隐藏密码方面仍然很重要,但如果网站被黑客入侵,它不会有任何区别。
方法二:基本密码加密 工作原理:为了为您的密码添加比纯文本提供的更多保护,大多数网站在将密码存储在其服务器上之前都会对您的密码进行加密。对于那些不知道的人,加密使用特殊的密钥将您的密码变成随机的文本字符串。如果黑客获得了这个随机的文本字符串,他们将无法登录您的帐户,除非他们也拥有密钥,然后他们可以使用该密钥对其进行解密。
问题是,密钥通常与密码存储在同一台服务器上,因此如果服务器被黑客入侵,黑客不必做太多工作来解密所有密码,这意味着这种方法仍然非常不安全.
我的强密码重要吗?不会。由于使用密钥很容易解密密码数据库,因此您的强密码在这里也不会产生影响。再说一遍:这是网站被黑客入侵的情况;如果你有一个爱管闲事的朋友或家人在浏览你的东西,一个强密码可以帮助他们避免猜测。
方法三:散列密码 工作原理:散列类似于加密,因为它会将您的密码变成一长串字母和数字以使其隐藏。然而,与加密不同的是,散列是一种单行道:如果你有散列,你就不能向后运行算法来获得原始密码。这意味着黑客必须获取哈希值,然后尝试多种不同的密码组合才能查看哪些有效。
但是,这种方法有一个缺点。虽然黑客无法将哈希解码回原始密码,但他们可以尝试许多不同的密码,直到其中一个与他们拥有的哈希匹配。计算机可以非常快地做到这一点,并且借助一种叫做彩虹表的东西——它本质上是一个包含数万亿个不同哈希值及其匹配密码的列表——它们可以查找哈希值以查看它是否已经被发现。尝试在 Google 中输入 e38ad214943daad1d64c102faec29de4afe9da3d。您会很快发现它是“password1”的 SHA-1 哈希。有关彩虹表如何工作的更多信息,请查看这篇文章,通过编码大师 Jeff Atwood 就该主题进行编码。
我的强密码重要吗?在这种情况下,是的。彩虹表由已经过哈希测试的密码组成,这意味着真正弱的密码将很快被破解。然而,它们最大的弱点不是复杂性,而是长度。你最好使用一个很长的密码(比如 XKCD 著名的“正确的马电池订书钉”)而不是一个短而复杂的密码(比如 kj$fsDl#)。
方法四:用 少许盐对密码进行哈希处理 工作原理:对哈希进行哈希处理意味着在对密码进行哈希处理之前,在密码的开头或结尾添加一个随机字符串(称为“salt”)。它为每个密码使用不同的盐,即使盐存储在相同的服务器上,也很难在彩虹表中找到那些加盐的散列,因为每个散列都是长、复杂和唯一的。LinkedIn 以不使用加盐哈希而闻名,这使他们在最近的黑客攻击后受到了很多审查——如果他们使用了盐,他们的用户会更安全。
通过阅读上述文章,我想到了以下问题
1 .即使我没有密码,我仍然可以截获消息摘要......我什至不需要密码......我会简单地发起回复攻击(即截获后发送消息摘要自己进行身份验证它!!)
上述问题的解决方法可以通过以下方式解决 a.服务器向用户生成一个随机字符串(通常称为挑战)并要求他用他的密码对其进行加密..... b.用户输入他的密码,消息摘要密码被创建,随机字符串被这个消息摘要加密 c.这个加密的字符串被发送到服务器。d.server还用用户的消息摘要加密随机字符串,用从用户收到的加密字符串检查它,如果两者匹配,他是有效用户..!
2.我的问题是如果黑客访问数据库,他将访问消息摘要/即使他没有访问数据库,他仍然可以在用户首次注册数据库时拦截通信链接时获取消息摘要.. ....如何防止这种情况?
mysql - 在 Hibernate 中使用密码(用于独立应用程序)
我正在寻找有关如何在我的 Java 独立应用程序(Netbeans+Spring+Hibernate+MySQL 数据库+Swing)中处理密码字段的最佳实践。
1)我创建了一个带有密码列的表......那么,该列必须是哪种数据类型?2)您建议在我的应用程序上遵循和实施哪种 SALTing 密码算法?3)您建议将密码保存为纯文本还是根据算法转换后?4)所有这个过程的示例代码
我希望我们可以帮助许多其他必须处理 Spring 的独立应用程序以及围绕 Hibernate 处理此类问题的任务的开发人员。
在此先感谢您的任何建议。
javascript - 将用户名 + 加密密码发送到 RESTful 服务
在我的应用程序中,我使用带有 JavaScript 客户端的 Spring MVC。现在是我需要向我的应用程序添加 4 眼验证表单的时候了。也就是说,第二个物理人必须过来输入他的用户名和密码,以验证某种敏感数据更新。然后系统将根据企业 LDAP 检查该人的用户名和密码,然后返回成功或失败。如果该人的身份验证失败,系统将通知用户无法删除/添加。如果成功,系统将执行更新。
我的问题是,既然所有的服务都是 RESTful 的,我怎样才能以最安全的方式实施这样的解决方案?我听说应该不惜一切代价避免使用 JavaScript API 加密密码并通过网络发送密码,因为任何中间人攻击都可能造成严重破坏。我也不想使用 HTTPS,它只能用于代表我应用程序的 1% 的表单的目的。我应该去 Spring Security 吗?如果是这样,我如何将 Spring Security Web 表单集成到 JavaScript 框架中?任何想法或经验都会受到欢迎。
最好的,吉米
database - 如何成功将用户名登录详细信息移动到另一个数据库
我继承了一个拥有 3000 个用户的网站。我想将所有这些用户导入一个基于 Doplphin (Bonex) 的新站点数据库。
我试图导入数据。用户数据导入成功,但密码不成功。
所有密码均已加密。
在旧数据库中,我不确定使用了什么类型的加密,我猜我认为它们不是 MD5。
这是当前存储在旧数据库中的密码之一的格式。
导入新数据库时,如何使这些密码正常工作?
关于将密码导入在不同框架内工作的新数据库,我需要知道什么方法吗?
php - 是否可以通过两次 crypt(rounds=Y/2) 获得 PHP crypt(rounds=Y) 的结果
我想做的是有这样的事情
我尝试使用 $res_25 字符串,但仍然无法获得我想要的结果。我假设 crypt() 用它做了一些不平凡的事情,并想知道是否有一种简单的方法可以做到这一点。
我打算通过以下方式使用它。当用户注册时,密码使用 5k 轮加密,结果存储在 DB 中(5k 只是一个例子,我们假设它足够安全)。盐帮助我们确保不能使用彩虹桌,而圆形可以保护我们免受蛮力攻击。如果数据库被盗,则无法解密密码,并且攻击者将无法在用户可能使用相同密码的其他地方使用这些密码。
我们的网站本身在登录表单上有“记住我”功能。不使用时,一切正常 - 我们将用户的状态存储在最终死掉的服务器会话中。但是,当用户想要使用“记住我”时,我们需要使用 cookie 来存储可用于对用户进行身份验证的数据。无论我们在 cookie 中存储什么 - 无论是原始密码还是 md5($res_5a) 之类的东西,如果攻击者窃取了 $res_5a 值并窃取了 cookie 创建背后的算法,他们将能够使用这些数据来伪造 cookie这将对用户进行身份验证。
我想做的是让登录表单创建 $res_25 cookie。然后每当加载页面时,服务器将添加 2.5k 更多迭代并检查该值是否与存储在数据库中的 $res_5a 匹配。这样,如果 $res_5a 被盗,攻击者将无法计算验证用户所需的 $res_25 值。
php - 将密码盐与密码哈希分开存储?
可能重复:
腌制和储存盐的最佳方法是什么?
使用随机盐改进密码散列
假设使用正确的密码散列算法并为每个密码生成不同的盐......
将盐与密码哈希分开存储是否存在安全风险?例如。在数据库表中,将密码哈希存储在一列中,并将密码盐存储在单独的列中?
我看到了通过使用特定算法将盐嵌入密码哈希本身的策略。稍后可以从密码哈希中提取盐。这更安全吗?
c++ - Qt/C++ 中的加密安全伪随机数生成器(跨平台)
我正在开发一个管理敏感数据的安全应用程序,所以我需要某种安全登录机制。我正在使用 Qt 库(C++ 版本),到目前为止,当用户从我的应用程序创建帐户时,我找不到提供此 [加密安全伪随机数生成器] 来获取 Salt 的函数。我知道应该如何将密码存储在数据库中,并且似乎在制作新盐时必须使用 CSPRNG。我找了很久,试图找到一种在 Qt 中做到这一点的方法,但我刚刚得出结论,没有办法单独在 Qt 中做到这一点。而是至少有一个跨平台的 C++ 方法来做到这一点?我可以包含一个库,但我更喜欢它是 LGPL,所以如果我将来选择开发专有/闭源应用程序,我仍然可以使用相同的方法。一些额外的信息是我现在不太可能使用 SQL(MSSQL Express 服务器),所以我添加了 SQL 标记。如果有帮助的话,我可能也会使用 QSslSocket(用于客户端/服务器之间的加密)。如果您能对此有所启发,我将不胜感激!
php - 使用盐的 php 加密/解密函数 - 如何?
我正在使用 php 作为基本应用程序登录系统,能够编辑帐户信息和删除帐户。我有一个mysql数据库。我需要使用盐加密/解密密码。我该怎么做?只需要确保数据是安全的。
passwords - Jablon 或 Ford 和 Kaliski 密码认证协议中的质数?
正如我们在这篇关于Jablon协议的论文中看到的那样,我们使用某些大素数 ( p,q,r )。
这些数字是如何存储的?
android - Base 64 和 AES base 64 是否相同?
我已经使用Base64
解码在我的应用程序中向服务器发送密码。但是我的服务器端支持建议我专门使用 AES base64;我用谷歌搜索了一下,发现了在 android 中不使用 AES base64 的原因;但是如果我发送普通的base64(在android.util.Base64中)加密字符串,我们可以使用AES base 64将它解密成原始字符串吗?