女朋友网站的密码不一样怎么办?黑客可以破解!

一天下午,当一个电话打来时,我正在公司愉快地编码。原来是女朋友打来的电话。

挂断电话后,我迅速登录了12306并更改了密码。好在我各个网站的密码都不一样,可以避免被认证。

下班回家后,女朋友第一时间来找我,让我给他解释一下12306数据泄露背后的知识。

明文密码

明文密码直接可以看懂,比如123456、admin等,而不是加密后显示****的内容,称为密码。比如 abc 代表 123。如果你告诉你 abc 而没有告诉你解码规则,你就无法翻译出真正的密码 123。

很多网站都有注册登录的功能。对于用户在注册时填写的用户名和密码,如果用户名和密码不做任何处理直接存入数据库,在这种情况下,用户的明文密码已保存。

这样直接保存了用户的明文密码,非常方便程序开发。当用户登录时,用户可以直接去数据库匹配账号和密码。但是,与此同时,也埋下了很大的隐患。一旦数据库信息泄露,黑客就可以获得所有用户的用户名和密码。

例如,用户的明文密码是helloworld,加密后的密文是xxeerrqq。

用户注册:

helloworld -> 加密 -> xxeerrqq -> 保存xxeerrqq到数据库中

用户登录

helloworld -> 加密 -> xxeerrqq -> 使用xxeerrqq到数据库中匹配密码

密码加密技术经过多年的发展,已经有很多成熟的解决方案,这里简单介绍一下。

对称加密

对称加密是指加密和解密需要相同密钥的加密算法。

最简单的对称加密算法是通过改变ASCII码来保存密码,比如将abcde转换为bcdef,加密算法就是ASCII码加1。

这种加密算法有一个特点,就是可以根据加密后得到的密文,根据密钥还原明文。

然而,这个算法已经被少数网站使用。虽然单独保存密钥的方法有很多,但是由于黑客可以破解网站并获取用户的密文,所以获取用户的密文是有可能的。到钥匙。

对称加密算法中常用的算法包括:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等

单向哈希算法

单向散列算法,也称为散列函数,是将任意长度的输入消息字符串变为固定长度的输出字符串的函数。一般用于生成消息摘要、密钥加密等。

单向哈希算法是一种无法通过计算恢复原始密码的算法,实现起来比较简单。

很多互联网公司都使用这种方法来保存用户密码,这曾经是一种比较安全的方法。

常见的散列函数(Hash functions)有:MD5(Message Digest Algorithm5)、SHA(Secure Hash Algorithm)、MAC(Message Authentication Code)、CRC(Cyclic Redundancy Check)

彩虹桌

彩虹表是用于加密哈希函数的逆运算的预计算表,通常用于破解加密的密码哈希。查找表通常用于加密包含有限字符的固定长度明文密码。这是以空间换时间的典型做法常用的对称密码算法有哪些,在每次尝试都进行计算的蛮力攻击中使用更少的计算能力和更多的存储空间,但与每个输入一个哈希的简单查找表相比,使用更少的计算能力和更多存储空间。更少的存储空间和更多的计算能力。

通常在对某个字段进行hash时(如MD5)会产生一个hash值,该hash值一般无法通过特定的算法得到原始字段。但是,在某些情况下,比如一个大的彩虹表,通过在表中查找MD5值,很有可能在很短的时间内找到hash值对应的真实字段内容。

盐哈希算法

Salt,在密码学中,是指在散列之前将散列内容(例如:密码)的任何固定位置插入到特定字符串中。这种将字符串添加到散列的方式称为“加盐”。它的作用是使加盐后的哈希结果与不加盐的结果不同。在不同的应用场景中,这个过程可以增加额外的安全性。

加盐后的哈希值可以大大降低用户数据被盗导致密码泄露的风险。即使通过彩虹表找到哈希值对应的原始内容,但是在With salt后,插入的字符串会打乱真实密码,使得获得真实密码的概率大大降低。

对于“固定盐”的Hash算法,需要保护“盐”不被泄露,会遇到和“保护对称密钥”一样的问题。一旦“盐”泄露,将根据“盐”重新建立彩虹表可以被黑。

PBKDF2算法

PBKDF2算法,即Password-Based Key Derivation Function 2。简单来说,PBKDF2就是多次重复计算加盐Hash,这个次数是可选的。

这个算法的原理大致相当于在Hash算法的基础上加了一个随机盐,进行多次hash运算。随机盐大大增加了构建彩虹表的难度,多重哈希也使得构建和破解表变得困难。大幅增加。

如果计算一次需要1微秒,那么计算100万次需要1秒。如果攻击一个密码需要 1000 万张彩虹表,那么构建相应的彩虹表所需的时间是 115 天。这个价格足以让大多数攻击者忘记它。

此方法已被美国政府机构标准化,并用于多个政府和军事系统。该方案最大的优点是标准化,易于实现,同时使用经过验证的SHA算法。

有很多算法也可以有效防御彩虹表,比如bcrypt和scrypt。

加密

bcrypt 是一种专门为密码存储而设计的算法,它基于 Niels Provos 和 David Mazières 在 USENIX 1999 中发布的 Blowfish 加密算法的变体。

在实现中,bcrypt 将使用盐渍过程来防止彩虹表攻击。同时,bcrypt也是一个自适应功能。它可以通过暴力破解增加迭代次数来抵抗日益增长的计算机计算能力。

bcrypt 加密的文件可以在所有支持的操作系统和处理器上传输。其密码必须为 8 到 56 个字符,并将在内部转换为 448 位密钥。但是,提供的所有字符都具有非常重要的含义。密码越强,您的数据就越安全。

bcrypt 已经被许多安全专家仔细分析过,并用于以安全着称的 OpenBSD。一般认为比PBKDF2更能承受算力提升带来的风险。 bcrypt 还具有广泛的库支持,因此这是存储密码的推荐方式。

在 Java 中使用 bcrypt

该算法的源代码可以在官网( )获得。在Java中,加密可以直接使用:

加密

scrypt 是由著名的 FreeBSD 黑客 Colin Percival 为他的备份服务 Tarsnap 开发的。

旨在考虑大规模自定义硬件攻击并故意需要大量内存操作。 scrypt 需要使用大量内存的原因在于生成大量伪随机数据作为算法计算的基础。一旦生成了这些数据,算法将以伪随机顺序读取数据以产生结果。因此,最直接的实现将需要大量的内存来将这些数据存储在内存中用于算法计算。

scrypt 不仅计算时间长,而且占用大量内存,使得并行计算多个摘要变得异常困难常用的对称密码算法有哪些,因此使用彩虹表进行暴力攻击更加困难。 scrypt 在生产环境中没有广泛使用,缺乏仔细的审查和广泛的库支持。但是只要scrypt在算法层面没有缺陷,其安全性应该高于PBKDF2和bcrypt。

在 Java 中使用 scrypt

有一个Java实现的scrypt工具类库()可以直接使用。用法也比较简单:

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论